먼저 foreach문을 사용해서 array의 제시된 부분을
Arrays 클래스의 copyOfRange( 원본배열 , 시작인덱스 , 끝인덱스 ) 메소드를 사용해
새로운 배열로 복사해온다.
그 다음 Arrays 클래스의 sort 메소드를 사용하여 정렬을 하고
결과를 담을 answer 배열에 제시된 인덱스의 값을 담아준다.
public int[] test(int[] array, int[][] commands) {
int[] answer = new int[commands.length];
int idx = 0;
for (int[] arg : commands) {
int[] list = Arrays.copyOfRange(array, arg[0] - 1, arg[1]);
Arrays.sort(list);
answer[idx++] = list[arg[2] - 1];
}
return answer;
}
// 결과값을 담을 answer 배열. 배열의 크기는 commands의 크기와 같다
int[] answer = new int[commands.length];
// answer의 인덱스 위치를 알려줄 변수
int idx = 0;
// 향상된 for문(= foreach)을 사용하여 2차배열인 commands의 내부 배열에 접근한다
for (int[] arg : commands) {
// 새로운 배열 list로
// arg에 제시된 범위의 array 값들 복사
int[] list = Arrays.copyOfRange(array, arg[0] - 1, arg[1]);
// Arrays 클래스의 sort 메소드를 이용하여 정렬
Arrays.sort(list);
// answer 배열에 결과로 출력할 값을 담는다.
answer[idx++] = list[arg[2] - 1];
}
출처 : 프로그래머스 스쿨 - 다른사람 풀이 첫번째
public int[] test(int[] array, int[][] commands) {
int[] answer = new int[commands.length];
for (int i = 0; i < commands.length; i++) {
int[] list = Arrays.copyOfRange(array, commands[i][0] - 1, commands[i][1]);
Arrays.sort(list);
answer[i] = list[commands[i][2] - 1];
}
return answer;
}
내 코드에서 볼 수 있듯이 나는 idx라는 변수를 새로 생성해서 answer 배열에 사용하였다.
생각을 조금만 더 해봤었더라면 하는 아쉬움이 생겼는데,
내 코드에서 사용된 idx 변수가 결국 commands의 길이 - 1 까지 증가할 것이고,
그렇게 된다면 굳이 향상된 for문을 사용할 필요 없이
기본 for문을 사용하는게 더 나았을거라는 생각이 들었기 때문이다.
왜냐하면 내가 사용한 코드는 결국
향상된 for문을 기본형태의 for문처럼 사용한거나 마찬가지니까..!!🤓!!!
좀더 생각을 해보고 코드를 작성해보도록 노력해야겠다.
앞으로도 화이팅 💪