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

The Flawless Bead·2023년 2월 10일
0

프로그래머스

목록 보기
4/20
post-thumbnail

🔗 문제로 이동 [완주하지 못한 선수]



이 문제의 핵심은 크게 아래와 같이 볼 수 있다.

  • HashMap의 활용 👉 더 보러가기
  • entrySet() : Key와 Value의 값이 모두 필요한 경우 사용
    keySet() : Key의 값만 필요한 경우 사용



✅ 문제풀이

import java.util.HashMap;
import java.util.Map.Entry;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        
				// 참가자 명단 초기화
        HashMap<String, Integer> hm = new HashMap<String, Integer>();
        for(String p : participant) {
            if(!hm.containsKey(p)) hm.put(p, 1);
            else hm.put(p, hm.get(p) + 1);
        }
        
				// 완주자 명단과 비교하여 해당 선수가 존재할 시 value--
        for(String c : completion) {
            if(hm.containsKey(c)) hm.put(c, hm.get(c) - 1);
        }
        
				// value가 0이 아닌 경우 찾기
        for(Entry<String, Integer> e : hm.entrySet()) {
            if(e.getValue() != 0) {
                answer = e.getKey();
                break;
            }
        }

        return answer;
    }
}


💬 참고로 keySet()을 사용해서 풀어본 결과 아래와 같이 결과가 나왔다. 수치상으로 큰 차이는 없어 보이지만 hm.get(key) 할 때마다 계속 HashMap을 탐색해야하기 때문에 매우 비효율적이다.
때문에 key, value를 같이 가져올 때는 항상 entrySet()을 사용해야 한다.

for(String key : hm.keySet()) {
        if(hm.get(key) != 0) {
            answer = key;
            break;
        }
}

profile
오늘을 살고 내일을 꿈꾸는 낭만주의자

0개의 댓글