https://programmers.co.kr/learn/courses/30/lessons/42748
- 문제를 보면 commands값에 있는 i, j, k는 우리가 세는 i, j, k번째를 말하므로 코딩 할 때 배열은 0부터 세므로 각자에서 1을 뺀 위치부터 하면 된다.
- answer은 commands.length()만큼 나오므로 answer의 길이는 commands 1차 배열 길이 만큼 나오므로 answer의 크기는 commands.length();만큼 선언.
- 입력 된 array 배열을 commands[n][0] 부터 commands[n][1]까지 임시 배열에 담는다.
- 임시 배열을 command[n][2]번째 값을 answer[n]에 넣어주고 answer을 리턴.
[ Arrays.copyOfRange()를 몰랐을 때 ]
이 코드는 보자마자 억소리가 났다.. 굳이 리스트 없이도 풀 수 있을텐데
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Arrays;
class Solution {
public int[] solution(int[] array, int[][] commands) {
int[] answer = new int[commands.length];
ArrayList<Integer> list = new ArrayList<Integer>(); // array
ArrayList<Integer> ijk = new ArrayList<Integer>(); // commands
List<Integer> ar = new ArrayList<Integer>();
for (int a = 0; a < commands.length; a++) { // commands(찾을) 횟수만큼 반복
ar.clear();
for (int arr : array) {
ar.add(arr);
}
ijk.clear();
for (int b = 0; b < 3; b++) { // 구간 지정
ijk.add(commands[a][b]);
}
ar = list.subList(ijk.get(0) - 1, ijk.get(1)); // 구간만큼 자르기
Collections.sort(ar); // 자른 구간 정렬
answer[a] = ar.get(ijk.get(2) - 1); // 자른 구간에서 commands[n][2]를 정답에 추가
}
return answer;
}
}
[ Arrays.copyOfRange()를 알고 난 후 ]
import java.util.Arrays;
class Solution {
public int[] solution(int[] array, int[][] commands) {
int[] answer = new int[commands.length];
for(int i=0; i<commands.length; i++) {
int[] tempArr = Arrays.copyOfRange(array, commands[i][0]-1, commands[i][1]);
Arrays.sort(tempArr);
answer[i] = tempArr[commands[i][2]-1];
}
return answer;
}
}
Arrays.copyOf(복사 대상의 배열, 복사할 길이);
Arrays.copyOfRange(복사 대상의 배열, 시작 인덱스, 끝 인덱스) 인덱스는 0부터 시작하는것 기준
* 끝 인덱스는 입력된 끝 인덱스 값 앞까지이므로 인덱스 n까지 복사하려면 n+1을 넣어주면 된다.