728x90
오늘도 알고리즘 유형을 익히기 위해 프로그래머스 고득점Kit에서 레벨1짜리 문제, 해시>완주하지 못한 선수를 풀었습니다.
슥 보고 문제가 굉장히 쉽다고 생각해서 10분만에 풀어냈으나 테스트 케이스에서 틀려버렸고, 패인은 문제를 끝까지 읽지 않은 것이었습니다.
이후 풀이에서는 시간초과로 실패하고, 잠깐 포기할까 했으나 핀이 '중복은 카운트를 생각해볼 수 있다'라는 힌트를 통해 결국 풀어냈습니다.
문제 유형별 접근법을 익히게 되네요!
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
Map<String, Integer> participantMap = new HashMap<String, Integer>();
for (int i=0; i <participant.length; i++) {
participantMap.put(participant[i],
participantMap.get(participant[i]) == null? 1 : participantMap.get(participant[i])+1);
}
for (int j=0; j<completion.length; j++) {
participantMap.put(completion[j], participantMap.get(completion[j]) - 1);
}
Set<String> keySet = participantMap.keySet();
for (String key : keySet) {
if (participantMap.get(key) != 0) {
answer = key;
break;
}
}
return answer;
}
}
// 다른 사람 풀이
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String, Integer> hm = new HashMap<>();
for (String player : participant) hm.put(player, hm.getOrDefault(player, 0) + 1);
for (String player : completion) hm.put(player, hm.get(player) - 1);
for (String key : hm.keySet()) {
if (hm.get(key) != 0){
answer = key;
}
}
return answer;
}
}
다른 분들의 풀이를 보면서 반성하게 됩니다.
HashMap의 getOrDefault도 업무에서는 굉장히 잘 활용했었는데, 왜 알고리즘 문제를 풀 때는 아무것도 생각이 안 나는 바보가 될까요?
오늘 배운점입니다.
1. 문제를 끝까지 읽자⭐️⭐️⭐️⭐️⭐️
2. 중복은 카운트를 고려해보자.
728x90
'츄Log > 알고리즘 연습장' 카테고리의 다른 글
연습#6 H-Index (1) | 2023.12.06 |
---|---|
연습#5 가장 큰 수 (1) | 2023.12.06 |
연습#4 폰켓몬 (1) | 2023.12.05 |
연습#2 K번째수 (1) | 2023.12.03 |
연습#1 599. Minimum Index Sum of Two Lists (0) | 2023.12.03 |