프로그래머스 [k번째 수] - 42748
2022. 1. 28. 22:34ㆍ프로그래머스
문제 링크입니다.
코딩테스트 연습 - K번째수 | 프로그래머스 (programmers.co.kr)
이 문제는 수를 정렬하는 것이 다입니다.
다만 여기서 중요한 포인트는 '시간' 인데요!
정렬을 어떻게 하느냐에 따라 시간복잡도가 달라지기 때문에, 코드를 잘 짜야 합니다. 문제의 제한사항을 봅시다.
제한사항
- array의 길이는 1 이상 100 이하입니다.
- array의 각 원소는 1 이상 100 이하입니다.
- commands의 길이는 1 이상 50 이하입니다.
- commands의 각 원소는 길이가 3입니다.
정답 소스코드
public int[] solution(int[] array, int[][] commands) {
int[] answer = new int[commands.length];
for(int i=0;i< commands.length;i++){ // O(N)
int start = commands[i][0];
int end = commands[i][1];
int k = commands[i][2];
List<Integer> temp = new ArrayList<>(); int idx = 0;
for(int j = start-1 ; j <= end-1 ; j++){ // O(N)
temp.add(array[j]);
}
Collections.sort(temp);
answer[i] = temp.get(k-1);
}
return answer;
}
정렬을 하는 부분을 봅시다.
Collections.sort() 함수의 시간복잡도 = O(N*logN)으로,
최선의 경우와 최악의 경우 모두 N*log(N)으로 동일합니다.
정렬에는 자바에서 java.util.Arrays 클래스에서 지원하는 Arrays.sort() 함수도 있습니다.
하지만 Arrays 클래스에서 지원하는 정렬은 최악의 경우 O(N^2) 이 될 수도 있습니다.
(Sort 함수의 시간복잡도 분석은 정렬에 관한 포스팅에서 더욱 심도있게 다루도록 하겠습니다.)
이렇게 정렬된 배열 temp를 가지고 k값에 따라 정답 배열에 하나씩 추가해주기만 하면 끝입니다.
'프로그래머스' 카테고리의 다른 글
2. 버블 정렬(Bubble Sort) (0) | 2022.01.31 |
---|---|
1. 선택 정렬 (Selection Sort) (0) | 2022.01.31 |
[완주하지 못한 선수] - 42576 (0) | 2022.01.27 |
Programmers [소수 만들기] - 12977 (0) | 2022.01.27 |
Programmers [없는 숫자 더하기] - 86051, [음 양 더하기] - 76501 (0) | 2022.01.27 |