본문 바로가기
코딩테스트 연습

진료순서 정하기

by 신재은👩🏼‍💻 2024. 4. 20.

문제 설명
외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 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;
import java.util.stream.IntStream;

class Solution {
    public int[] solution(int[] emergency) {
        // 원소와 인덱스를 함께 저장
        int[][] indexedEmergency = IntStream.range(0, emergency.length)
                                            .mapToObj(i -> new int[]{emergency[i], i})
                                            .toArray(int[][]::new);

        // 응급도에 따라 내림차순으로 정렬
        Arrays.sort(indexedEmergency, (a, b) -> Integer.compare(b[0], a[0]));

        // 순위를 저장할 배열 초기화
        int[] ranks = new int[emergency.length];

        // 정렬된 배열에 따라 순위 매기기
        for (int i = 0; i < indexedEmergency.length; i++) {
            ranks[indexedEmergency[i][1]] = i + 1;
        }

        return ranks;
    }
}


이건 내가 진짜 손을 못 대서 gpt 통해서 풀었다.

 

gpt도 한 3트만에 풀더라.

 

어려운 문제라고는 생각을 안 하는데...

 

이번에도 정말 많은 사람들이 정말 다양한 해법으로 문제를 풀었더라.

 

다른 풀이는 하나도 눈에 안 들어오는데

첫 페이지 거의 끝까지 스크롤 해서야 납득이 가는 답안을 찾았다.

 

import java.util.*;

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

        for (int i=0;i<emergency.length;i++) {
            answer[i] = 1;
            for (int j=0;j<emergency.length;j++) {
                if (emergency[i] < emergency[j]) {
                    answer[i]++;
                }
            }
        }

        return answer;
    }
}

'코딩테스트 연습' 카테고리의 다른 글

팩토리얼  (0) 2024.04.20
모스부호 (1)  (0) 2024.04.20
배열 만들기 5  (0) 2024.04.19
문자열 뒤집기  (0) 2024.04.19
글자 지우기  (0) 2024.04.19