[프로그래머스] Level0.진료순서 정하기

Benjamin·2023년 1월 31일
0

프로그래머스

목록 보기
2/58

emergency의 값을 복사해둔 배열을 하나 더 만들고, 그 배열을 정렬하고 순서대로 해당 값이 emergency에서 어디있는지 탐색하는 로직을 사용했다.
정렬, 탐색... 너무 비효율적인 로직같아서 다른 풀이를 찾아봤고, 이런 방법을 기억해야할것같아 기록한다.

내 풀이

import java.util.*;

class Solution {
    public int[] solution(int[] emergency) {
        int[] answer = new int[emergency.length];
        Integer[] temp = new Integer[emergency.length];
        for(int i=0; i<emergency.length; i++) {
            temp[i] = emergency[i];
        }
        List<Integer> list = Arrays.asList(temp);
        Arrays.sort(emergency);
        for(int i=0; i < temp.length; i++) {
            int index = list.indexOf(emergency[i]);
            answer[index] = temp.length-i;
        }
        return answer;
    }
}

다른 풀이

class Solution {
    public int[] solution(int[] emergency) {
        int[] answer = new int[emergency.length];
        for(int i = 0; i < answer.length; i++){
            int idx = 1;
            for(int j = 0; j < answer.length; j++){
                if(emergency[i] < emergency[j]){
                    idx++;
                }
            }
            answer[i] = idx;
        }
        return answer;
    }
}

훨씬 깔끔하고, 메모리나 시간복잡도가 덜 하다.

응급순서를 정한다는것은 결국 이중 for문을 사용해서, 자기보다 큰 값이 몇개있는지 판단하고 그 개수+1을 저장하는것이다.

0개의 댓글