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

·2023년 1월 5일
0

프로그래머스

목록 보기
10/59

📌 문제 설명

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

📌 제한 사항

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

📌 입출력 예

emergencyresult
[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]

📌 코드

class Solution {
    public int[] solution(int[] emergency) {
         int [] answer = new int [emergency.length];
        int max = 0, before_max = 101, max_index = 0, priority = 1;
        for(int i = 0; i < emergency.length; i++)
        {
            for(int j = 0; j < emergency.length; j++)
            {
                if(max < emergency[j] && before_max > emergency[j]){
                    max = emergency[j];
                    max_index = j;
                }
            }
            answer[max_index] = priority++;
            before_max = max;
            max = 0;
        }
        return answer;
    }
}

📌 문제 해결 과정

💡 이 문제를 해결하면서 가장 중점으로 둔 것은 가장 큰 수에서 내림차순으로 작은 수를 찾아나가는 것이었다 ❕ 중첩 반복문을 사용하였는데 첫 for문은 배열 길이 만큼 원소를 넣어 주기 위함이고, 안에 있는 for문은 원소끼리 비교를 해 주기 위함이다

💡 max는 해당 반복문 차례에서 가장 큰 수를 담기 위함이고, before_max는 이전의 max 값을 담기 위함이다 (내림차순으로 큰 수를 찾아야 하니 이전 max 값보다 한 단계 작은 수를 찾게 하기 위함이다) 그래서 조건문으로 max에 담긴 값보다는 크고 before_max 값보단 작은 값을 두 번째 반복문 내의 최댓값으로 설정하고, 그 값이 들어 있는 배열의 인덱스인 max_index를 구하고 두 번째 반복문이 끝나면 answer 배열의 max_index 자리에 우선 순위를 설정해 주는 방식으로 문제를 해결하였다

💡 다음 반복이 이어지기 전에 max는 0으로 초기화시켜 줘야 다시 남은 값들을 구할 수 있으며 0으로 초기화하기 전에 가지고 있던 값을 before_max에 대입해 주게 되는 것이다

profile
공부는 많은 양을 하진 않더라도 꾸준히 매일 하기

0개의 댓글