문제
Hash 알고리즘 - 완주하지 못한 선수
풀이 비교
| 나의 풀이
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
HashMap<String, Integer> names = new HashMap<>();
// 1. 입력 받기
for(int i=0; i<participant.length; i++){
String name = participant[i];
if(names.get(name) == null){
names.put(name, 1);
}
else{
names.put(name, names.get(name)+1);
}
}
// 2. 완주자 체크
for(int i=0; i< completion.length; i++){
String name = completion[i];
if(names.get(name)== 1){
names.remove(name);
}else{
names.replace(name, names.get(name) -1);
}
}
return new ArrayList<>(names.keySet()).get(0);
}
}
| 좋은 풀이
import java.util.HashMap;
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;
}
}
🍎 차이점
1. for문 더 간단하게
해당 코드는 리스트를 순차적으로 접근할 때 쓰면 좋다.
for (String player : participant)
2. getOrDefault 사용
따로 null일 때를 체크할 필요 없이 디폴트 값을 지정하여 코드를 더 쉽게 짤 수 있다.
getOrDefault(Obejct key, V DefaultValue) - java.util.Map
• key : 값을 가져와야 하는 요소의 키
• defaultValue : 지정된 키로 매핑된 값이 없는 경우 반환되어야 하는 기본값
반환 값 : 찾는 키가 존재하면 해당 키에 매핑되어 있는 값을 반환하고, 그렇지 않으면 디폴트 값이 반환된다.
for (String player : participant) hm.put(player, hm.getOrDefault(player, 0) + 1);
3-1. value가 0일 때 remove 안함
내풀이 : 존재하는 값만 남기기 위해 value가 0이되면 remove를 통해 지운 후 남아있는 값 출력
-> 0이 아닐 때를 출력
3-2. keySet()으로 for문 바로 이용
for (String player : completion) hm.put(player, hm.get(player) - 1);
for (String key : hm.keySet()) {
if (hm.get(key) != 0){
answer = key;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 정렬 : K번째 수 (1) | 2024.01.10 |
---|---|
[프로그래머스] Hash : 베스트 앨범 - L3 (1) | 2024.01.10 |
[프로그래머스] 의상 : Hash - L2 (0) | 2024.01.09 |
[프로그래머스] 전화번호 목록 : Hash - L2 (1) | 2024.01.04 |
[프로그래머스] 폰켓몬 : Hash - L1 (1) | 2024.01.03 |