알고리즘/프로그래머스 일기

[프로그래머스] 완주하지 못한 선수

홍또~ 2020. 6. 1. 11:23

문제:

완주하지 못한 선수

 

설계:

1)hashmap을 이용하여 key = name, value = 횟수 로 설정한다.

2)if문으로 get을 이용하여 해당 name의 value가 0인지 검증하고, 0이라면 participant의 name을 put으로 넣으면서 value를 1로 넣는다. 0이 아니라면, get으로 value값을 가져와 그 값에서 1을 증가시킨 값을 put으로 다시 넣는다.

3)completion의 name을 가져와 해당 name으로 get을하여 hashmap에서 value를 가져오고 가져온 value에서 -1을하고 다시 hashmap에 put으로 넣는다

4)hashmap의 key값을 탐색하여 그 value가 0이 아닐 시, 해당 key값을 결과값에 저장한다.

 

시행착오: 

2)와 3)을 아주 간단하게 코드한줄로 나타낼 수 있는 api가 있었다.

바로 getOrDefault(key, default) 함수이다. 

hashmap에서 key값으로 value를 가져올때, 값이없으면 default로 가져오게 할 수 있다, 또한 값이 있으면 

해당 값을 불러온다. 이 getOrDefault 가 기본 스켈레톤에 있어서 이 함수를 찾아보았고, 이것을 사용하니 

내가 설계했던 2)와 3)이 매우 간단한 코드로 구현 가능했다.

코드:

import java.util.Arrays;
import java.util.HashMap;
class Solution{
    public String solution(String[] participant, String[] completion){
        String answer ="";
        HashMap<String, Integer> prtcpt_map = new HashMap<>();
        for(String name: participant){
            prtcpt_map.put(name, prtcpt_map.getOrDefault(name, 0)+1);
        }    
        for(String name: completion){    
            prtcpt_map.put(name, prtcpt_map.get(name)-1);
        }
        for(String name: prtcpt_map.keySet()){
            if(prtcpt_map.get(name) !=0){
                answer = name;
                break;
            }
        }
        return answer;
    }
}

결과:

실행 결과

한줄평:

솔직히 나는 hashmap이 익숙하지 않아서, 주제가 hashmap이 아니였으면

array 정렬로 풀었을것 같다.

하지만 hashmap이 훨씬 간단하고 빠른것 같다. 

'알고리즘 > 프로그래머스 일기' 카테고리의 다른 글

[프로그래머스] k번째 수  (0) 2020.05.28
[프로그래머스] LV1-1  (0) 2020.05.28
프로그래머스를 시작  (0) 2020.05.28