[알고]완주하지 못한 선수

무지성개발자·2023년 9월 8일
0
  • 내 코드
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;
    }
    
}
  • 프로그래머스 best
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이다. 이유는 모르겟다.
하지만 같은 같은 값이면 새옹지마라고 같은 효율성이면 보기 깔끔한게 좋으니 베스트 코드를 열심히 보기 바란다.

profile
no-intelli 개발자 입니다. 그래도 intellij는 씁니다.

0개의 댓글