[Programmers] 완주하지 못한 선수(JAVA)

GyeongEun Kim·2021년 7월 9일
0
post-custom-banner



이 문제가 해시 카테고리에 있는 문제인데, 처음에 까먹고 다른 방법으로 풀었다. 그리고 해시맵을 이용해서도 다시 풀어 총 2가지 방법으로 풀었다.

정렬을 이용하는 방법

우선 해시맵을 이용하지 않고 participantcompletion을 각각 정렬한다. 정렬을 하는 이유는 두 배열을 순차탐색하여 비교하기 위해서이다. 두 배열은 무조건 한사람을 제외하고는 똑같다. 그래서 같은 인덱스의 participantcompletion에 있는 요소가 다르다면 이것은 participant에 있는 요소가 completion에는 없기 때문일 것이다. 즉, 이 요소가 완주하지 못한 선수이다. 이 선수를 temp에 저장한다.

그런데 만약 완주하지 못한 선수가 맨 끝에 있다면 temp에는 아무것도 없을 것이다. 따라서 이 때는 participant의 제일 마지막 요소를 넣어준다.

class Solution {
        public String solution(String[] participant, String[] completion){
            Arrays.sort(participant);
            Arrays.sort(completion);
            String temp="";


            for (int i=0;i<completion.length;i++) {
                if (!participant[i].equals(completion[i])) {
                    temp=participant[i];
                    break;
                }
            }
            if (temp.equals(""))
                temp=participant[participant.length-1];

            return temp;
        }
    }

HashMap을 이용하는 방법

사실 해시맵을 처음 사용해봐서 조금 헤맸다. HashMap은 일단 key-value의 쌍을 저장하는 자료구조이다. 여기서는 참가자들의 이름을 key에 저장하고 value에는 그 이름을 가진 참가자의 수를 저장한다. 예를들어 "kiki"라는 동명이인이 3명 있다면 kiki의 value값은 3이다.

그리고 completion배열을 순차탐색하여 completion내의 선수이름과 같은 key를 가진 요소의 vaule값을 1씩 줄인다. 완주한 선수들을 제거하는 것이다. 이 반복문을 모두 돌고나면 1명을 제외한 모든 key의 value값이 0이 될것이다. 따라서 value가 0이아닌 key가 완주하지 못한 선수가 된다!

    class Solution {
        public String solution(String[] participant, String[] completion) {
            Map<String,Integer> par = new HashMap<>();
            String answer="";

            for (String i: participant)
                par.put(i,par.getOrDefault(i,0)+1);

            for (int i=0;i<completion.length;i++) {
                par.put(completion[i],par.get(completion[i])-1);
            }

            Iterator<String> iter = par.keySet().iterator();
            while (iter.hasNext()) {
                String key = iter.next();

                if (par.get(key)!=0) {
                    answer=key;
                }

            }


            return answer;
        }
    }

Map.getOrDefaultValue(key,defaultValue)

  • 찾고자 하는 key가 Map에 존재하면 해당 value를 반환
  • 없다면 defaultValue를 반환
profile
내가 보려고 쓰는 글
post-custom-banner

0개의 댓글