[프로그래머스/JAVA] 해시 - 42576번 완주하지 못한 선수

신승현·2022년 12월 24일
0

더 좋은 문제 풀이가 있거나 궁금하신 점이 있다면 편하게 댓글 남겨주세요!


📝 문제


완주하지 못한 선수


🤷‍♂️ 접근 방법


문제를 처음보고 저는 배열을 정렬하여 문제를 해결했습니다.
그러나 HahsMap을 사용하니 속도적인 측면에서 아래와 같은 큰 차이가 났습니다.

배열로 문제를 풀었을 때 300ms
HashMap으로 문제를 풀었을 때 72ms

하여 이번 글은 HashMap을 사용법을 익히고자 작성하였습니다.

📌 HashMap getOrDefault

	getOrDefault(Object key, V DefaultValue)

HahsMap.getOrDefault() 메소드는 해당 key가 존재할 경우 key의 value 값을 반환하지만, key 가 존재하지 않을 경우 DefaultValue를 반환합니다.

본 코드에서 위의 메소드를 사용한 이유는 중복된 이름이 있을 경우를 처리하기 위함이었습니다.

        HashMap<String, Integer> map = new HashMap<>();
        
        for(String key : participant) map.put(key, map.getOrDefault(key,0) +1);

put을 통해 key와 value 값을 입력할 때, 기존에 key 값이 존재한다면 value를 새로운 값으로 update 합니다. 그러나 map.getOrDefault(key,0) +1 를 사용한다면 기존에 값이 있다면 기존값+1을, 없다면 0+1을 할 것입니다. 하여 이미 중복된 key 값이 있다면 해당 value는 2가 됩니다.


✍ 풀이


방법1 Arrays


import java.util.Arrays;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        
        Arrays.sort(participant);
        Arrays.sort(completion);
        
        for(int i = 0; i< participant.length; i++){
            if(i == completion.length) return participant[i];
            
            if(!participant[i].equals(completion[i])){
                return participant[i];
            }
        }
        
        return "";
    }
}

방법2 HashMap

import java.util.HashMap;

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

Reference

profile
I have not failed. I've just found 10,000 ways that won't work. - Thomas A. Edison

0개의 댓글