문제
문제 답안
import java.util.*;
class Solution {
public int[] solution(int[] numlist, int n) {
int[] answer = new int[numlist.length];
int[] len = new int[numlist.length];
Arrays.sort(numlist);
for(int i = 0; i < numlist.length; i++){
len[i] = Math.abs(numlist[i]-n);
}
Arrays.sort(len);
int k = 0;
for(int i = 0; i <len.length; i++){
for(int j = numlist.length-1; j >= 0; j--){
if(Math.abs(numlist[j]-n) == len[i]){
answer[k++] = numlist[j];
numlist[j] = n;
break;
}
}
}
return answer;
}
}
답안 풀이
생각보다 시간이 걸렸고, 생각보다 갑자기(?) 해결된 문제
우선 해결해야하는 점을 생각해보면...
이 한가지가 마음에 계속 걸리면서 풀었는데... 이를 어떻게 해결하고자 하였냐면 일단 numlist를 정렬해주었다. 그리고 for문을 거꾸로 돌리면서 큰 숫자를 먼저 넣는 식으로!
4번에서 break를 안해준다거나 numlist에 garbage 값을 안넣어주면 런타임에러가 나고 오류가 난다.
번외로 numlist를 내림차순 정렬을 해주려고 찾아봤으나 Collections.reverseOrder()이 있는데 이는 int, double, float과 같은 primitive type에는 쓸 수가 없다.
Integer, String과 같은 것에만 쓸 수 있다. 최대한 문제에서 주어진 타입 같은건 안건들이고 싶어서 필자는 쓰지 않았다.