📚 Data Architect/Programmers
고득점 Kit - Hash (완주하지 못한 선수)
신건우
2023. 4. 10. 22:20
💡 문제 파악
마라톤 선수들의 전체명단인 배열 participant와 완주한 선수들의 명단인 배열 completion이 주어진다.
완주하지 못한 선수의 이름을 return 하도록 solution 함수 작성
제한사항
- 동명이인이 있을수 있다.
- 참가자의 이름은 1~20개 이하의 알파벳 소문자로 이루어져 있다.
- completion의 길이는 participant의 길이보다 1 작다.
입출력 예시
participant | completion | return |
---|---|---|
["leo", "kiki", "eden"] | ["eden", "kiki"] | "leo" |
["marina", "josipa", "nikola", "vinko", "filipa"] | ["josipa", "filipa", "marina", "nikola"] | "vinko" |
["mislav", "stanko", "mislav", "ana"] | ["stanko", "ana", "mislav"] | "mislav |
알고리즘 풀이
구해야 하는 값은 완주하지 못한 사람을 구하는것이다.
즉, completion 배열에는 없고 participant배열에는 있는 사람을 찾으면 된다.
- 이름과 인원수를 각각 Key-Value 형식으로 completion을 먼저 순회하면서 인원수 +1
그 다음 participant를 순회하면서 인원수 -1을 한다. - 인원수가 0이 아닌 사람을 선택한다.
풀이
import java.util.HashMap;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String, Integer> hm = new HashMap<>();
// 중복제거하면서 순회하고 인원수 +1
for (String player : participant) {
hm.put(player, hm.getOrDefault(player, 0) + 1);
}
// 순회하면서 완주한 선수에 대해 -1
for (String player : completion) {
hm.put(player, hm.get(player) - 1);
}
// -1이 되지 못한 선수(Value가 1인 선수)를 answer에 담는다
for (String key : hm.keySet()) {
if (hm.get(key) != 0) {
answer = key;
}
}
return answer;
}
}