import java.util.HashMap;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String, Integer> map = new HashMap<>();
for(String str : participant) {
map.put(str, map.getOrDefault(str, 0) + 1);
}
for(String str : completion) {
map.put(str, map.getOrDefault(str, 0) + 1);
}
for(String str : map.keySet()) {
if(map.get(str) % 2 != 0) {
answer = str;
}
}
return answer;
}
}
participant : 참가한 선수가 담긴 배열
completion : 완주자가 담긴 배열
참가한 선수와 완주자 목록 모두 map에 담아주는데 선수이름을 key값으로, value값은 같은 이름 개수를
count 해줌.
map.getOrDefault(key, 0) + 1 의 의미는 map에서 key값을 검색해서 만약 해당하는 key값이 있을 경우
value값을 + 1씩 증가시키고, 해당하는 key값이 없는 경우는 0을 넣게된다.
예를들어 참가자가 : {A, A, B}, 완주자 : {A, B} 인 경우 map = {A = 3, B = 2}가 된다.
여기서 참가자 : 완주자의 이름이 1:1로 매칭되는 경우 완주를 한 사람이라고 볼 수 있다. (아래 그림 참조)
바꿔말하면 map의 value값이 짝수인 경우이다. (완주자의 수가 참가자보다 무조건 한명 적다는 조건 때문에 가능)
참가자와 완주자가 1:1로 매칭되지 못하는 경우를 찾으면 되는데,
map의 value값이 홀수가 되는 경우를 찾으면 된다.
'코딩테스트 > 문제풀이' 카테고리의 다른 글
숫자 천단위 마다 콤마 붙이기 (0) | 2021.08.23 |
---|
댓글