차곡차곡 성 쌓기
article thumbnail

문제 

Hash 알고리즘 - 완주하지 못한 선수

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이 비교

| 나의 풀이

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;
        }
}

 

 

 

728x90
profile

차곡차곡 성 쌓기

@nagrang

포스팅이 좋았다면 "좋아요" 해주세요!