외과 의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열
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] |
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
에 대입해 주게 되는 것이다