문제
https://programmers.co.kr/learn/courses/30/lessons/42576
코딩테스트 연습 - 완주하지 못한 선수
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수
programmers.co.kr
풀이
Hash를 이용하여 문제를 해결할 수 있었다.
각각의 참가자와 완주자의 이름을 HashMap의 Key로 설정하여 Map에 올려두고 Map의 getOrDefault 메서드를 사용하여 Key에 해당하는 Value가 있으면 가져오고, 아닐 경우 0을 Default로 지정하여 각각을 1씩 더해주면 해당 참가자와 완주자의 이름이 몇 번 언급됐는지 가져올 수 있다.
참가자와 완주자의 이름이 언급된 횟수가 짝수라면 참가자, 완주자 명단에서 각각 한 번 씩 불린 것이므로 완주한 사람이 되는 것이고, 언급된 횟수가 홀수라면 참가자 명단에서밖에 이름이 존재하지 않는 것이기 때문에 완주하지 못하는 사람이 되는 것이다.
이를통해 동명이인까지 판별할 수 있는데 예를들어 'A'라는 사람이 2명 있고, 'A'가 참가자 명단에서 2번 불렸고(동명이인이기 때문), 'A' 중 한 명이 완주자 명단에 언급됐다고 가정하면 Map의 형태가 'A' : 3인 형태가 나오므로 홀수인 value값에 대해서는 완주하지 못한 사람이라고 판별할 수 있으며 동명이인까지 판별할 수 있게 되는 것이다.
코드
import java.util.HashMap;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String, Integer> map = new HashMap<>();
for (String key : participant) {
map.put(key, map.getOrDefault(key, 0) + 1);
}
for (String key : completion) {
map.put(key, map.getOrDefault(key, 0) + 1);
}
for (String key : map.keySet()) {
if(map.get(key) % 2 != 0) {
answer = key;
break;
}
}
return answer;
}
}
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 프로그래머스 Level1 신고 결과 받기 Java (카카오 코딩테스트) (0) | 2022.05.25 |
---|---|
[프로그래머스] 프로그래머스 Level1 [1차] 다트 게임 Java (카카오 코딩테스트) (0) | 2022.05.25 |
[프로그래머스] 프로그래머스 Level1 키패드 누르기 Java (카카오 코딩테스트) (0) | 2022.05.24 |
[프로그래머스] 프로그래머스 Level1 이상한 문자 만들기 Java (0) | 2022.05.23 |
[프로그래머스] 프로그래머스 Level2 k진수에서 소수 개수 구하기 Java (카카오 코딩테스트) (0) | 2022.05.23 |