이 문제의 핵심은 크게 아래와 같이 볼 수 있다.
- 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;
}
}