emergency의 값을 복사해둔 배열을 하나 더 만들고, 그 배열을 정렬하고 순서대로 해당 값이 emergency에서 어디있는지 탐색하는 로직을 사용했다.
정렬, 탐색... 너무 비효율적인 로직같아서 다른 풀이를 찾아봤고, 이런 방법을 기억해야할것같아 기록한다.
import java.util.*;
class Solution {
public int[] solution(int[] emergency) {
int[] answer = new int[emergency.length];
Integer[] temp = new Integer[emergency.length];
for(int i=0; i<emergency.length; i++) {
temp[i] = emergency[i];
}
List<Integer> list = Arrays.asList(temp);
Arrays.sort(emergency);
for(int i=0; i < temp.length; i++) {
int index = list.indexOf(emergency[i]);
answer[index] = temp.length-i;
}
return answer;
}
}
class Solution {
public int[] solution(int[] emergency) {
int[] answer = new int[emergency.length];
for(int i = 0; i < answer.length; i++){
int idx = 1;
for(int j = 0; j < answer.length; j++){
if(emergency[i] < emergency[j]){
idx++;
}
}
answer[i] = idx;
}
return answer;
}
}
훨씬 깔끔하고, 메모리나 시간복잡도가 덜 하다.
응급순서를 정한다는것은 결국 이중 for문을 사용해서, 자기보다 큰 값이 몇개있는지 판단하고 그 개수+1을 저장하는것이다.