
마라톤에 참가한 사람들과 완주한 사람들의 목록이 있음
단 한 명만 완주하지 못했고, 그 이름을 찾아내는 문제
포인트는 동명이인이 존재할 수 있다는 점!
그래서 단순 포함 여부만 비교하면 안됨
- HashMap을 이용해 이름과 등장 횟수를 기록
- completion 배열을 먼저 처리해 이름별 완주 횟수를 기록
- 이후 participant를 순회하면서
- 해시맵에 존재하지 않거나 값이 0이면, 그사람은 완주하지 못함
- 값을 주여가며 체크
class Solution {
public String solution(String[] participant, String[] completion) {
// 이름과 참가 횟수를 저장할 해시맵 생성
HashMap<String, Integer> map = new HashMap<>();
// 완주한 선수의 이름을 해시맵에 저장 (이름이 중복될 수 있으므로 횟수를 누적)
for (String s : completion) {
map.put(s, map.getOrDefault(s, 0) + 1);
}
// 참가자 배열을 순회하며 완주 여부 확인
for (String s : participant) {
// 완주하지 않은 선수는 해시맵에 없거나 개수가 0인 경우
if (map.getOrDefault(s, 0) == 0) {
return s; // 완주하지 못한 선수 반환
}
// 완주한 경우, 해시맵에서 해당 이름의 개수를 1 감소
map.put(s, map.get(s) - 1);
}
// 모든 참가자가 완주했다면 null 반환 (이 문제에서는 절대 null이 반환되지 않음)
return null;
}
}'알고리즘 문제풀이 > 프로그래머스 문제풀이' 카테고리의 다른 글
| 프로그래머스 문제 풀이 - 할인 행사 (해시 맵) (2) | 2025.08.06 |
|---|---|
| 프로그래머스 문제 풀이 - 기능개발(큐) (9) | 2025.08.04 |
| 프로그래머스 문제 풀이 - 올바른 괄호(스택) (2) | 2025.08.04 |