728x90
※ 해당 문제의 링크는 여기입니다. ※
다른 분들은 더 편하게 푸셨지만
제가 작성한 코드와 원리는 동일합니다.
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[] temp = Arrays.copyOfRange(array, commands[i][0]-1, commands[i][1]);
Arrays.sort(temp);
answer[i] = temp[commands[i][2]-1];
}
return answer;
}
}
위 코드는 다른 분들이 작성한 코드들 중 하나입니다.
public int[] solution(int[] array, int[][] commands) {
int commandLength = commands.length;
int[] answer = new int[commandLength];
for (int i = 0; i < commandLength; i++) {
int firstIndex = commands[i][0];
int finalIndex = commands[i][1];
int index = commands[i][2];
if (firstIndex != finalIndex) {
int[] temp = Arrays.copyOfRange(array, firstIndex - 1, finalIndex);
Arrays.sort(temp);
answer[i] = temp[index-1];
}
else {
int temp = array[firstIndex-1];
answer[i] = temp;
}
}
return answer;
}
위 코드는 제가 작성하였습니다.
원리는 단순합니다.
배열을 주고, 해당 배열 i번째 ~ j번째까지 자른 후, 정렬을 한 뒤, k번째 수를 temp 배열에 저장합니다.
단, 이때 i와 k 는 -1를 해야합니다.
배열은 0부터 시작하므로 -1를 해야 원하는 위치를 조절할 수 있습니다.
copyOfRange 메소드는 깊은 복사를 하는 메소드입니다.
코딩테스트를 연습하시는 분들을 위한 짧은 글...
사람들마다 구현하는 방식에는 차이가 있지만
크게 3가지가 있다고 생각합니다.
- 라이브러리 및 내장 함수 사용하여 짧고 간결한 코드, 해당 내장 함수 모르면 사용 불가능
- 라이브러리 및 내장 함수 사용 ❌, 길지만 다른 언어에서도 충분히 적용 가능
- 가독성을 위해 내장 함수를 최대한 덜 사용
가독성은 언제나 중요하지만, 개인적으로 보았을 때, 내장 함수를 사용하는 분들이 많습니다.
아마 내장 함수가 없으면, 코드가 길어지고 지저분해지기 때문으로 보임
물론 어떻게 코딩테스트를 하든지간에 상관은 없지만, 제 개인적인 생각으로는
가독성과 내장 함수를 덜 사용하는 3번 방향이 제일 좋다고 생각합니다.
(사실, 어떻게든 해결하기만 해도 큰 문제는 없지만,
해당 언어에 대해 자세히 배우고 쓰고 싶다면 1번, 단순 알고리즘은 2번, 1과 2번 합친 결과물: 3번)
이상입니다.
'공부 > 알고리즘, 자료구조' 카테고리의 다른 글
[프로그래머스] 프린터 (0) | 2022.02.15 |
---|---|
[프로그래머스] 기능개발 (0) | 2022.02.14 |
[프로그래머스] 베스트 앨범 (0) | 2022.02.11 |
[프로그래머스] 위장 (0) | 2022.02.10 |
[프로그래머스] 전화번호 목록 (0) | 2022.02.09 |