반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 프로그래머스
- @Data
- 코딩 테스트
- 가장 큰 수
- @Setter
- 크론 표현식
- 쿠버네티스
- K번째수
- @Getter
- 다리를 지나는 트럭
- @EnableScheduling
- @configuration
- 알고리즘
- Java
- 모던 자바 인 액션
- 영속 자료구조
- 롬복 어노테이션
- 전화번호 목록
- H-index
- 정렬
- 해시
- 루씬 인 액션
- 커링
- 스프링 스케쥴러
- 검색 기능 확장
- 완주하지 못한 선수
- 고차원 함수
- kubenetes
- 스택/큐
- 기능개발
Archives
- Today
- Total
Today I Learned
[프로그래머스] 정렬 Level 1. K번째수(JAVA) 본문
728x90
자르고, 정렬하고, 뽑고 끝!
코드
import java.util.*;
class Solution {
public int[] solution(int[] array, int[][] commands) {
int[] answer = new int[commands.length];
int[] copyArray = {};
for(int i = 0; i < commands.length; i++){
int[] command = commands[i];
copyArray = Arrays.copyOfRange(array, command[0]-1, command[1]);
Arrays.sort(copyArray);
answer[i] = copyArray[command[2]-1];
}
return answer;
}
}
결과
자바 내장함수를 사용했더니 너무 금방 끝나버려서 직접 구현 해봤다.
copyOfRange 함수 만든김에 정렬은 merge sort 썼음
로직은 동일함
코드
class Solution {
public int[] solution(int[] array, int[][] commands) {
int[] answer = new int[commands.length];
int[] newArray = {};
for(int i = 0; i < commands.length; i++){
int[] command = commands[i];
newArray = copyOfRange(array, command[0]-1, command[1]);
newArray = mergeSort(newArray);
answer[i] = newArray[command[2]-1];
}
return answer;
}
public int[] copyOfRange(int[] array, int startIndex, int endIndex){
int arrayLength = endIndex-startIndex;
int[] copyArray = new int[arrayLength];
for(int i = 0; i < arrayLength; i++){
copyArray[i] = array[i+startIndex];
}
return copyArray;
}
public int[] mergeSort(int[] array){
if (array.length < 2) return array;
int arrayLength = array.length;
int[] lowArray = mergeSort(copyOfRange(array, 0, array.length/2));
int[] highArray = mergeSort(copyOfRange(array, array.length/2, array.length));
int[] mergeArray = new int[array.length];
int low = 0;
int high = 0;
int merge = 0;
while(low < lowArray.length && high < highArray.length){
if(lowArray[low] < highArray[high])
mergeArray[merge++] = lowArray[low++];
else
mergeArray[merge++] = highArray[high++];
}
while(low < lowArray.length){
mergeArray[merge++] = lowArray[low++];
}
while(high < highArray.length){
mergeArray[merge++] = highArray[high++];
}
return mergeArray;
}
}
결과
...?
??????
왜 내장함수 썼을때보다 10배나 빨라졌을까???
Arrays.sort() 함수도 내부적으로는 quick sort나 merge sort 기반이라고 하던데?
728x90
'알고리즘 & 코딩테스트' 카테고리의 다른 글
[프로그래머스] 정렬 Level 2. H-Index(JAVA) (0) | 2021.01.27 |
---|---|
[프로그래머스] 정렬 Level 2. 가장 큰 수(JAVA) (0) | 2021.01.24 |
[프로그래머스] 해시 Level 3. 베스트앨범(JAVA) (0) | 2021.01.21 |
[프로그래머스] 해시 Level 2. 위장 (JAVA) (0) | 2021.01.20 |
[프로그래머스] 해시 Level 2. 전화번호 목록 (JAVA) (0) | 2021.01.19 |
Comments