Algorithm/프로그래머스

[프로그래머스][LV.1] 완주하지 못한 선수

홍홍_ 2022. 4. 27. 17:55

문제📜

https://programmers.co.kr/learn/courses/30/lessons/42576

나의 생각의 흐름💡

1) 완주하지 못한 인원이 1명이니까 결국 1명만 남겠구나
2) 동명이인이 있으니 이름당 수를 카운트 하자
3) 완주한 인원의 이름의 카운트를 줄여주고 마지막에는 제거하자
4) 남은 한 명이 완주하지 못한 인원

나의 풀이🔑

import java.util.*;
class Solution {
    public String solution(String[] participant, String[] completion) {  

        String answer = "";
        //동명이인이 있으므로 이름당 숫자 카운팅 String(이름), Integer(사람 수)
        HashMap<String, Integer> answerMap = new HashMap<>();
        for(int i=0; i< participant.length;i++) {
            String name = participant[i];
            if (answerMap.containsKey(name)) {
                int count = (int)answerMap.get(name);
                answerMap.put(name, ++count);                
            } else {    
                answerMap.put(name, 1);
            }
        }
        //완주한 인원 디카운팅, Map에서 제거
        for(int i=0; i< completion.length;i++) {            
            int count = (int)answerMap.get(completion[i]);
            String name = completion[i];
            if (count == 1) {
                answerMap.remove(name);
            } else {                 
                answerMap.put(name, --count); 
            }  
        }
        //다시 스트링의 형태로 바꿔줌
        String temp = answerMap.keySet().toString();
        answer = temp.substring(1, temp.length()-1);

        return answer;
    }
}

후기✍

처음에 동명이인을 생각을 안하고 for문을 돌리다가 한꺼번에 사라지는 일이 발생해서 조정했다
조금 시간이 지체되었고 주먹구구식으로 풀었다



출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges