💡 문제
💬 입출력 예시
📌 풀이(소스코드)
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String, Integer> map = checkParticipant(participant);
checkCompletion(completion, map);
return findAnswer(answer, map);
}
private static HashMap<String, Integer> checkParticipant(String[] participant) {
HashMap<String, Integer> map = new HashMap<>();
for (String name : participant) {
map.put(name, map.getOrDefault(name, 0) + 1);
}
return map;
}
private static void checkCompletion(String[] completion, HashMap<String, Integer> map) {
for (String name : completion) {
map.put(name, map.get(name) - 1);
}
}
private static String findAnswer(String answer, HashMap<String, Integer> map) {
for (String key : map.keySet()) {
if (map.get(key) != 0) {
answer = key;
}
}
return answer;
}
}
📄 해설
접근
HashMap<String, Integer>
을 사용한다. 동명이인이 있을 수 있으므로 값을 확인하도록 Integer
사용
- 참가자 명단의 이름을 해시 맵의 키로 등록하고, 해당 키의 값을 1 증가시킨다.
- 완주자 명단의 이름을 해시 맵에서 찾고, 해당 키의 값을 1 감소시킨다.
- 해시 맵을 탐색하면서 정수 값이 0이 아닌 키를 찾는다. (참가자 수 - 완주자 수 == 0 이 되어야 그 선수가 완주한 것)
과정
저런 완주를 해야할텐데