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

Elmo·2022년 9월 2일
0
post-custom-banner

🔔 완주하지 못한 선수

해시로 풀라고 준 문제지만 해시로 풀 방법을 빠르게 떠오르지 못했다..
그래서 내 방식대로 풀어버렸다.

참가자들과 완주한 사람들 배열을 정렬해서 비교하는 방식이다.

🔑 java 풀이(정렬)

import java.util.*;
class Solution {
    public String solution(String[] participant, String[] completion) {
        Arrays.sort(participant);
        Arrays.sort(completion);
        for(int i=0; i<participant.length-1; i++){
            if(!(participant[i].equals(completion[i])))
               return participant[i];
        }
        return participant[participant.length-1];
    }
}

해시맵을 사용할 경우 getOrDefault를 이용해야한다.

해시맵은 중복키를 허용하지 않는 점을 이용해야한다.

  • 참가자들을 순서대로 map에 put한다. 이 때 value값은 getOrDefault로 기존에 동명이인이 있는지 없는지를 판단해서 1씩 증가시킨다.
  • 완주한 사람들의 해당 value값을 -1씩 뺀다.
  • 결국 value값이 0이 아닌 사람이 완주하지 못한 한 명의 사람이다.

🔑 java 풀이(해시)

import java.util.*;

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

        for (String key : map.keySet()) {
            if (map.get(key) != 0){
                answer = key;
            }
        }
        return answer;
    }
}
profile
엘모는 즐거워
post-custom-banner

0개의 댓글