🎯 문제
외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.'
<제한사항>
중복된 원소는 없습니다.
1 ≤ emergency의 길이 ≤ 10
1 ≤ emergency의 원소 ≤ 100
⛳ 답안
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
class Solution {
public int[] solution(int[] emergency) {
int[] answer = new int[emergency.length];
List<Integer> list= new ArrayList<>();
// 배열이랑 원소 똑같은 list 생성
for(int i=0; i<emergency.length; i++) {
list.add(emergency[i]);
}
// 진짜 역대급 이상하고 멍청한 짓을 하고 있었어
// a=Arrays.stream(emergency).boxed().toArray(Integer[]::new);
// Arrays.sort(a, Comparator.reverseOrder());
// 배열을 정렬하면 맨앞에가 제일 작은 값일테니까 그 값 순서로 list에 대입해서 index 알아내기
Arrays.sort(emergency);
for(int i=0; i<list.size(); i++) {
answer[list.indexOf(emergency[i])]=list.size()-i;
}
return answer;
}
}
🎲 과정
빡친다
생각의 흐름을 정리해 보자면
1. 최대 원소 값이 100이니까 각 원소에서 100뺀다음에 그 수의 차가 적은 순서대로 순서 넣어줄까?
-> 각각의 자리에 맞는 순위를 넣어줄 방법을 모르겠어서 안됨
2. 배열 내림차순으로 정렬하고, list를 배열이랑 값 똑같이 하나 더 만들어서 거기서 index값 가져오기
-> int[ ]은 sort를 역순으로 하는 Comparator.reverseOrder( )가 안된대
=> Integer[ ]로 만들어주려고Arrays.stream(emergency).boxed().toArray(Integer[]::new);
3. 생각해보니까 굳이 내림차순으로 바꿀 필요도 없었어...그냥 오름차순으로 하고 순위 넣어줄때i
넣어줄거list.size()-i
이렇게만 넣어주면 되는일이었는데...
암튼 배열이랑 원소똑같은 list 하나 만들어서 순서대로 정렬한 배열의 값들이 그 list에 몇번째에 있는지 알아낸 다음 그 인덱스자리에 순위 넣어주는 식으로 했다.
그리고 syso도 이상한데 찍어가면서 값 확인하고 있어가지고 값이 이상하게 나와서 이미 결과는 맞게 도출되는 아이를 계속 보고 앉아있었어...
여러모로 쓸데없이 시간을 많이 낭비했네...