코테 준비-문제풀기

프로그래머스 - 완주하지 못한 선수_해시맵(HashMap) 사용해 풀기

FireStone 2022. 2. 6. 23:42

https://programmers.co.kr/learn/courses/30/lessons/42576

이 문제를 다시 풀어봤는데 난 여전히 sort를 사용해 풀었고, 더 좋은 알고리즘을이 있을 것 같아 여러개 찾아봄 

찾아 보다 좋은 풀이가 있어서 해당 풀이로 문제를 풀어보고자 함

 

=> 참고로 sort 사용해서 풀었을 때 보다 훨씬 빠름 

 

getOrDefault 

getOrDefault(Object key, V DefaultValue) : 찾는 키가 존재하면 찾는 키의 값을 반환하고 아니면 default값 반환

 

1) hashmap 에 participant 의 선수들을 key로 설정해 +1 씩 증가시켜 넣어줌 

  -> 동명이인이 있을 수 있기 때문에 중복 처리를 해줘야함

  -> 이때 getOrDefault 를 사용해 count가 1씩 증가 될 수 있도록 해줌 

hm.put(player, hm.getOrDefault(player,0)+1);

  => 해당 플레이어가 없으면 0 으로 설정, 있으면 해당 값을 반환해 1증가 

 

2) completion에 있는 선수들을 찾아 -1 씩 해줌 

3) hashmap에 있는 키들중 값이 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;
                break;
            }
        }
        
        return answer;
        
    }
}