코딩테스트 연습 > 해시 > 완주하지 못한 선수
https://school.programmers.co.kr/learn/courses/30/lessons/42576
참여자 배열 participant, 완주자 배열 completion이 주어진다. 완주하지 못 한 선수가 한 명 있다. 이 한명의 선수를 찾아서 결과로 return 하는 문제이다.
% 참가자 중에는 동명이인이 있음을 주의

HashMap을 통해 participant의 참가자를 key로 설정한다. 이 때, getOrDefault() 메서드를 통해 입력한다.(이미 등록된 선수들은 값이 지정되어 있기 때문에 +1을 하기 위해 사용)
이 후, completion 배열에 있는 선수들을 통해 HashMap을 재정비(completion에 이름이 있는 선수는 -1을 해서 등록되지 않은 선수를 찾기 위함)
map을 한 번 순회하면서 값이 0이 아닌 선수(key) 를 return한다.
import java.util.HashMap;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String,Integer> map = new HashMap<>();
for (String s : participant){
map.put(s, map.getOrDefault(s, 0) + 1);
}
for (String c : completion){
map.put(c, map.get(c)-1);
}
for (String key : map.keySet()){
if (map.get(key) != 0){
return key;
}
}
return answer;
}
}
이미 맵에 등록 되어있을 때, getOrDefault(key,value) 메서드를 통해 확인하고, getOrDefault 메소드는 값이 없는 경우 지정한 value로 기본 값이 된다는 것을 알았다. 또한 이를 통해 해당 key의 value 값을 가져와 확인하고 변경 할 수 있음을 알 수 있었고, keySet() 메서드를 통해 key들의 모음을 확인 할 수 있음을 알았다.
