프로그래머스/Lv. 0(코딩테스트 입문)

[프로그래머스 코딩테스트] 진료 순서 정하기(Java)

Sigfriede 2023. 6. 12. 01:00

  문제 설명

  외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return 하도록 solution 함수를 완성해주세요.

 

  제한사항

  • 중복된 원소는 없습니다.
  • 1 <= emergency의 길이 <= 10
  • 1 <= emergency의 원소 <= 100

 

  입출력 예

emergency result
[3, 76, 24] [3, 1, 2]
[1, 2, 3, 4, 5, 6, 7] [7, 6, 5, 4, 3, 2, 1]
[30, 10, 23, 6, 100] [2, 4, 3, 5, 1]
import java.util.Arrays;
class Solution {
    public int[] solution(int[] emergency) {
        int[] answer = new int[emergency.length];
        int[] arr = Arrays.copyOf(emergency, emergency.length);
        Arrays.sort(arr);
        int index = 1;
        for (int i = emergency.length - 1; i >= 0; i--) {
            for (int j = 0; j < emergency.length; j++) {
                if (arr[i] == emergency[j]) {
                    answer[j] = index++;
                }
            }
        }
        return answer;
    }
}

  answer 배열의 크기는 emergency의 길이와 동일합니다.

  배열 arr를 생성합니다. Arrays 클래스의 copyOf 메소드를 이용하여 emergency 배열 전체를 복사합니다.

  Arrays 클래스의 sort 메소드를 이용하여 arr를 오름차순으로 정렬합니다.

  응급도를 지정할 변수 index를 생성합니다. 순서는 1부터 시작할 것이므로 1을 할당합니다.

  바깥 for문이 emergency의 길이 - 1부터 i가 0보다 클 때까지 i가 1씩 감소합니다. 정렬된 배열은 오름차순이므로 arr에서 가장 큰 원소부터 다루려는 것입니다.

  안쪽 for문에서 emergency의 길이만큼 순회합니다.

  if문에서 arr의 i번째 원소가 emergency의 j번째 원소와 동일하다면 answer의 j번째 원소는 index를 할당합니다. j가 순외하면서 index 역시 1씩 증가할 것입니다.

  이러한 풀이는 정렬도 해야하고 별도의 메모리를 필요로 하고, 중첩 for문을 사용하기 때문에 만약 조건이 빡빡했더라면 성공하지 못할 수도 있지 않을까 싶습니다. 합리적인 풀이를 조금 더 고려해봐야 할 것 같습니다.

 

  8일차 클리어….