문제 이해
- 마라톤 선수들이 단 한명의 선수를 제외하고는 모두 마라톤을 완주했다.
- 완주하지 못한 선수의 이름을 return하라.
<조건>
- 알 수 없음
<입력>
- participant: 마라톤에 참여한 선수들의 이름이 담긴 배열 (1 ~ 100,000, 10^5)
- completion: 마라톤에 완주한 선수들의 이름이 담긴 배열 (1 ~ 100,000, 10^5)
- ※ 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 구성
- ※ 동명이인이 있을 수 있음.
<출력>
- 완주하지 못한 선수의 이름을 return하라.
문제 풀이
동명이인이 없었다면 단순히 Set으로 해결할 수 있겠지만,
동명이인이 존재하기에 '각 이름마다 몇 명 있는지' 체크를 해줄 필요가 있습니다.
그렇기에 HashMap을 써서 문제를 해결했습니다.
전체 코드
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
HashMap<String, Integer> map = new HashMap<>();
for(String str: participant){
map.put(str, map.getOrDefault(str, 0)+1);
}
for(String str: completion){
map.put(str, map.get(str) - 1);
}
for(String key: map.keySet()){
if(map.get(key) != 0) return key;
}
return null;
}
}
배운 점
map에 처음 값을 넣으며, 중복한 key가 들어올 때는
map.put(key, map.getOrDefault(key, 0) + 수정할 값);
map의 값을 수정하고 싶을 때는
map.put(key, map.get(key) + 수정할 값);
이 두 방법을 잘 기억하자!
'Problem Solving > [Java] Programmers' 카테고리의 다른 글
[Java] 프로그래머스: 디스크 컨트롤러 (0) | 2025.01.18 |
---|---|
[Java] 프로그래머스: 가장 큰 수 (0) | 2025.01.18 |
[Java] 프로그래머스: K번째수 (0) | 2025.01.18 |
[Java] 프로그래머스: 전화번호 목록 (0) | 2025.01.12 |
[Java] 프로그래머스: 폰켓몬 (0) | 2025.01.12 |