class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
Map<String, List<Integer>> reacer = reacerInit(participant);
//완주한 사람 map에서 제거, 동명이인은 List 값 줄입
for(var c : completion){
List<Integer> list = reacer.get(c);
if(list.size() > 1){
list.remove(list.size() -1);
}else{
reacer.remove(c);
}
}
for(String key : reacer.keySet()){
answer = key;
break;
}
return answer;
}
// 동명이인을 List으로 했음 [0, 0, ...]
public Map<String, List<Integer>> reacerInit(String[] participant){
Map<String, List<Integer>> reacer = new HashMap<>();
for(String p : participant){
if(reacer.get(p) != null){
reacer.get(p).add(0);
}else{
List<Integer> list = new ArrayList<>();
list.add(0);
reacer.put(p, list);
}
}
return reacer;
}
}
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;
}
}
getOrDefault를 사용한 베스트 코드가 확실히 깔끔함.
댓글 중엔 hm.keySet()을 entrySet()으로 바꾸는게 더 좋다는 것도 있었음.
근데 효율성은 내꺼나 best나 둘 다 41.7이다. 이유는 모르겟다.
하지만 같은 같은 값이면 새옹지마라고 같은 효율성이면 보기 깔끔한게 좋으니 베스트 코드를 열심히 보기 바란다.