난이도 : 하
출제 빈도 : 높음
평균 점수 : 높음
문제 전체 내용 : https://programmers.co.kr/learn/courses/30/lessons/42748?language=java
문제 요약
array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면
- array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
- 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
- 2에서 나온 배열의 3번째 숫자는 5입니다.
내코드
성능의 좋지만 코드 가독성이 떨어짐.
/**
* 테스트 1 〉 통과 (0.27ms, 69.2MB)
* 테스트 2 〉 통과 (0.31ms, 69.8MB)
* 테스트 3 〉 통과 (0.27ms, 69.2MB)
* 테스트 4 〉 통과 (0.29ms, 68.6MB)
* 테스트 5 〉 통과 (0.31ms, 70.2MB)
* 테스트 6 〉 통과 (0.31ms, 69.2MB)
* 테스트 7 〉 통과 (0.29ms, 70.4MB)
*/
public static int[] KNumber(int[] array, int[][] commands) {
int[] answer = new int[commands.length];
for (int i = 0; i < commands.length; i++) {
ArrayList<Integer> orgArrayList = new ArrayList<>();
for (int k = commands[i][0]-1; k <= commands[i][1]-1;k++) {
orgArrayList.add(array[k]);
}
Collections.sort(orgArrayList);
answer[i] = orgArrayList.get(commands[i][2]-1);
}
return answer;
}
카카오 제출 답안 가장 인기 있는 코드
가독성이 좋음.
coryOfRange API 활용이 잘되어 코드가 깔끔함.
coryOfRange API 사용하여 성능이 조금 떨어짐.
/**
* 테스트 1 〉 통과 (0.45ms, 69.6MB)
* 테스트 2 〉 통과 (0.46ms, 69.6MB)
* 테스트 3 〉 통과 (0.48ms, 70.8MB)
* 테스트 4 〉 통과 (0.49ms, 68.5MB)
* 테스트 5 〉 통과 (0.51ms, 70.4MB)
* 테스트 6 〉 통과 (0.44ms, 70.3MB)
* 테스트 7 〉 통과 (0.48ms, 70.5MB)
*
*/
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;
}
}
마무리
코드 가독성을 위해 아래와 같이 시작, 끝, 가져오기를 각 각 선언했으면 더 좋았을 것 같음.
// 기존 코드
for (int k = commands[i][0]-1; k <= commands[i][1]-1;k++) {
...
}
// 수정 코드
int start = commands[i][0] - 1;
int end = commands[i][1] - 1;
int pick = commands[i][2] - 1;
for (int k = start; k <= end; k++) {
...
}
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[카카오 알고리즘][완전탐색] 모의고사 JAVA (0) | 2020.09.05 |
---|