[Sort] K번째 수
public static int[] solution(int[] array, int[][] commands) {
int[] answer = {};
answer = new int[commands.length];
int startIdx = 0;
int endIdx = 0;
int returnIdx = 0;
for (int i = 0; i < commands.length; i++) {
startIdx = commands[i][0];
endIdx = commands[i][1];
returnIdx = commands[i][2];
int [] ary = new int[endIdx-startIdx+1];
int idx = 0;
for(int k=startIdx-1; k<endIdx; k++) {
ary[idx] = array[k];
idx++;
}
Arrays.sort(ary);
answer[i] = ary[returnIdx - 1];
}
return answer;
}
내 코드는 먼저 시작과 끝, 반환될 위치의 인덱스를 각각 구했다. 입력받은 문자열 배열을 시작부터 끝까지 돌리며 사용되는 문자만 임시 배열에 담고 오름차순 정렬 후 반환될 위치의 인덱스를 사용해 답을 구했다. 입력받은 위치와 배열의 인덱스가 서로 다른 위치를 가르킨다는 것만 주의하면 쉽게 풀 수 있는 문제였다.
String substring(int beginIndex, int endIndex)
beginIndex의 위치에서부터 endIndex의 위치전까지의 문자열을 반환한다
예시)
0 1 2 3 4
안 녕 하 세 요
substr(0,2) 의 결과는 안녕
substr(2,4) 의 결과는 하세
substr(4,4) 의 결과는 요
나름 쉽고 간단하게 풀었는 줄 알았는데 다른 사람 풀이를 참고하니 조금만 더 생각했다면 불필요한 코드를 제거할 수 있었을텐데 아쉬움이 남았다. 그중 가장 간결했던 코드와 주요 함수이다. 풀이과정은 똑같은데 copyOfRange 함수를 사용해서 코드가 훨씬 간단했다.
public int[] solution(int[] array, int[][] commands) {
int[] answer = new int[commands.length];
for(int i=0; i<commands.length; i++){
int[] temp = Arrays.copyOfRange(array, commands[i][0]-1, commands[i][1]);
Arrays.sort(temp);
answer[i] = temp[commands[i][2]-1];
}
return answer;
}
copyOfRange (int [] original_array, int from_index, int to_index)
original_array 원본배열로부터 from_index부터 to_index까지를 복사한다.
Author And Source
이 문제에 관하여([Sort] K번째 수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@eeun95/Sort-K번째-수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)