외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.
최근에는 바로 문제를 풀지 않고 머리속으로 흐름을 생각하고 문제를 풀려고 초반부에 주석을 달고 문제 풀이를 시작했다.
코드를 다 짜고 왜 안되나 싶었는데 알고 보니 객체의 형태가 달랐기 때문에 인덱스를 정상적으로 찾을 수 없었다..Integer형과 Int형 사이에 부딪힘
해결하기 위해 이진탐색을 통해 값을 찾았다. 속도도 빠르고 중복이 없었기에 가능했다.
import java.util.*;
class Solution {
public int[] solution(int[] emergency) {
//중복된 게 없으니까 일단 내림차순 정렬시키고.
//정렬된 배열 순회하면서 X번째 원소가 어디 인덱스에 위치했는지 찾기?
//3 76 24
//76 24 3
//정렬X인 3은 정렬된 위치에 어디에 위치?
int[] sorted = Arrays.copyOf(emergency, emergency.length);
Arrays.sort(sorted);
int[] answer = new int[emergency.length];
//Integer 객체로 다른 객체이기 때문에 찾지 못하고 -1을 반환
for(int i = 0 ; i < emergency.length; i++){
answer[i] = Arrays.asList(sorted).indexOf(emergency[i]);
}
return answer;
}
}
import java.util.*;
class Solution {
public int[] solution(int[] emergency) {
int[] sorted = Arrays.copyOf(emergency, emergency.length);
Arrays.sort(sorted);
int[] answer = new int[emergency.length];
for(int i = 0 ; i < emergency.length; i++){
int target = emergency[i];
int index = Arrays.binarySearch(sorted, target);
answer[i] = Math.abs(index+1-emergency.length) +1;
}
return answer;
}
}