728x90
동명이인 여부 O > 해시맵으로 이름별 사람 수 카운트하
- HashMap<String, Integer>를 사용해서 이름별 등장 횟수를 저장.
- participant에서 이름을 모두 +1 하고,
completion에서 이름을 -1함. - 마지막에 value가 1로 남은 사람이 완주 못한 사람
*동명이인 조건때문에 이분 탐색은 적절치 X
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = ""; // 완주하지 못한 선수의 이름
HashMap<String, Integer> h = new HashMap<>();
for(String name : participant){
h.put(name, h.getOrDefault(name, 0)+1);
}
for(String name : completion){
h.put(name, h.getOrDefault(name, 0)-1);
}
for(String name : participant){
if(h.get(name)!=0)
answer = name;
}
return answer;
}
}
import java.util.*;
class Solution {
// 완주하지 못한 선수 이름 리턴
public String solution(String[] participant, String[] completion) {
Map<String, Integer> cnt = new HashMap<>();
//참가자 수 세기
for(String p: participant){
cnt.put(p, cnt.getOrDefault(p, 0) + 1);
}
// 완주자 수 빼주기
for(String c: completion){
cnt.put(c, cnt.get(c) - 1);
// 0이면 완주한거임
if(cnt.get(c) == 0){
cnt.remove(c);
}
}
return cnt.keySet().iterator().next();
}
}
정렬 버전
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
Arrays.sort(participant);
Arrays.sort(completion);
for (int i = 0; i < completion.length; i++) {
if (!participant[i].equals(completion[i])) {
return participant[i];
}
}
// 끝까지 모두 같으면 마지막 참가자가 미완주자
return participant[participant.length - 1];
}
}'Algorithm > Programmers' 카테고리의 다른 글
| 조이스틱 : Java (1) | 2025.07.05 |
|---|---|
| [Lv.2] 기능개발 : Java (3) | 2025.07.05 |
| [Lv.2] 소수찾기 : Java (0) | 2025.07.05 |
| [Lv.2] 피로도 : Java / DFS+백트래킹 (0) | 2025.07.05 |
| [Lv.3] 이중우선순위큐 (0) | 2025.07.04 |