각종 문제들

[프로그래머스] 코딩테스트 입문 - 진료 순서 정하기

hunm719 2023. 4. 10. 21:56

문제 출처 : 프로그래머스

 

class Solution {
    public int[] solution(int[] emergency) {
        int[] answer = new int[emergency.length];
        Arrays.sort(emergency);

        HashMap<Integer, Integer> map = new HashMap<>();
        for (int i = 1; i <= emergency.length; i++) {
            map.put(emergency[i - 1], i);
        }

        for (int i = 0; i < answer.length; i++) {
            answer[i] = map.get(i + 1);
        }

        return answer;
    }
}

처음 문제를 봤을 때, HashMap을 활용해서 풀면 되겠다고 생각했다.

Hash Map은 key 와 value를 한 쌍으로 가지니까, 각각 응급도와 emergency의 요소 값을 넣어서

최종적으로 answer[i] = map.get(i) 와 같은 식으로 int[] answer의 요소를 map의 값을 가져와 채워넣는 식이었다.

 

 

하지만 이를 실행해보니 NPE(NullPointException)이 발생했다.

해당 부분을 chatGPT에게 물어봤다

문제는 변경된 코드가 내가 작성한 코드와 완전히 같다는 것이었다.

그래서 둘이 완전히 똑같은 코드인데 어떻게 된건지 물었더니

 

갑자기 도돌이표가 되어버렸다.

 

 

여기저기 검색해본 결과 해당 문제는 순서가 중요한 자료구조 중 선입선출이 특징인 queue 사용하여 간편하게 풀 수 있다는걸 알았다.(queue를 사용해 푸는 방법을 굳이 올리진 않겠다.)

 

출제자의 의도와는 많이 엇나간것 같지만 개인적으로 map을 이용해서 풀 수 없다고는 생각되지 않는데, 어떻게 풀어나가야 맞을지 고민이 된다...

 

 

 

해당 부분에 대한 피드백을 받았다

코드스테이츠 백엔드팀 이정민님의 피드백! 감사합니다 :)

이렇게 하고 테스트를 돌려보니

오름차순으로 정렬해서 그런지 순서가 반대로 나왔다!

 

그래서 내림차순 정렬을 하려고 정렬 부분을 Arrays.sort(emergency, Collections.reverseOrder());로 바꿔줬는데

intellij 화면

위와 같은 오류가 발생했다.

Arrays.sort(emergency, Comparator.reverseOrder());

Comparator로도 역시 동일한 오류가 발생한다.

 

도와줘요 챗지피티