https://school.programmers.co.kr/learn/courses/30/lessons/42576
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
⭐️ 중요 포인트
1. HashMap을 사용해서 <Key : 선수이름, Value: 빈도> 형식으로 동명이인을 포함한 선수이름이 몇 번 나왔는지 저장한다.
2. Hash.getOrDefault()를 사용하여 null값을 처리
3. Hash.entrySet()을 통해 Set<Map.Entry<K, V>> 형태의 Set을 반환받고 이것을 for-each를 통해서 순회한다.
(이 때, 만약 remove()와 같은 삭제 기능을 넣어야 할 경우 "Iterator<Map.Entry<K, V>> iter = map.entrySet().iterator()"를 통해서 iterator를 반환받고 "while(iter.hasNext())"를 통해서 순환하며 값을 remove하면 된다.)
import java.util.*;
class Solution {
static String[] staticParticipant;
static String[] staticCompletion;
static Map<String, Integer> hash;
static List<String> notCompletion;
static void init(String[] participant, String[] completion) {
staticParticipant = participant;
staticCompletion = completion;
hash = new HashMap<>();
notCompletion = new ArrayList<>();
}
static void solve() {
for (String key: staticParticipant) {
/* staticParticipant에서 key를 통해서 값을 넣는데,
해당 key가 hash에 존재하지 않으면 0을 기본으로 반환하고
아니면 value를 리턴받아서 +1를 해서 다시 put한다.
getorDefalut를 사용하는 이유는 원래 hash에서 없는 key를
호출하면 null 처리를 해줘야하는데 이것을 getOrDefalut()를
통해서 한 번에 해결할 수 있다.
*/
hash.put(key, hash.getOrDefault(key, 0) + 1);
}
// 완주한 사람에 대해서 1씩 감소
for (String key: staticCompletion) {
hash.put(key, hash.getOrDefault(key, 0) - 1);
}
/*
위 과정이 모두 끝나고 나면 완주하지 못한 사람은 value가 0이 아니기때문에 notCompletion에 저장
(notCompletion에 저장한 이유는 제한사항에는 완주하지 못한 사람은 무조건 1명이라고 나와있기는
하지만 확장성을 위해서 이렇게 구현)
*/
for (Map.Entry<String, Integer> entry: hash.entrySet()) {
if (entry.getValue() != 0) {
notCompletion.add(entry.getKey());
}
}
}
public String solution(String[] participant, String[] completion) {
init(participant, completion);
solve();
return notCompletion.get(0);
}
}
'프로그래머스 알고리즘 > Java' 카테고리의 다른 글
[프로그래머스] 전화번호 목록 - Java (0) | 2025.04.23 |
---|---|
[프로그래머스] 폰켓몬 - Java (0) | 2025.04.22 |
[프로그래머스] 등굣길 - Java (1) | 2025.04.21 |
[프로그래머스] 문자열 압축 - Java (0) | 2025.02.03 |
[프로그래머스] 이상한 문자 만들기 - Java (0) | 2025.02.03 |