마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return하는 solution 함수를 작성하는 문제이다.
참여한 선수 이름을 key로 하는 HashMap을 사용한다. 참가자 명단(participant 배열)에 이름이 더 나오는 만큼 key가 이름인 value에 1씩 더한다. 완주자 명단(completion 배열)에 이름이 나오는 만큼 이름(key)의 value에 1씩 뺀다. 참여자 명단에 있는 만큼 완주했다면 value는 -1이 되어야 한다. value가 -1이 아닌 선수는 완주하지 못한 선수로 판단한다.
import java.util.HashMap;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String, Integer> race = new HashMap<>();
// 참가자 명단
for (int i = 0; i < participant.length; i++) {
if (race.get(participant[i]) != null) {
int n = race.get(participant[i]);
race.put(participant[i], n + 1);
} else {
race.put(participant[i], 0);
}
}
// 완주자 명단
for (int i = 0; i < completion.length; i++) {
race.put(completion[i], race.get(completion[i])-1);
}
// 완주하지 못한 선수
for (int i = 0; i < participant.length; i++) {
if(race.get(participant[i]) != -1 ) {
answer = participant[i];
break;
}
}
return answer;
}
}