문제 : https://leetcode.com/problems/height-checker/
풀이 : 선형시간 정렬 (계수정렬)
2021.10.05 - [알고리즘/알고리즘] - 선형시간 정렬
구현 JAVA
class Solution {
public int heightChecker(int[] heights) {
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
for(int h : heights) {
if(min>h) min = h;
if(max<h) max = h;
}
return countingSort(heights, min, max);
}
public int countingSort(int[] arr, int min, int max) {
int[] count = new int[max-min+1];
int[] out = new int[arr.length];
//각 요소별 갯수 세기
for(int a: arr) {
count[a-min]++;
}
//각 요소별 첫 위치값을 구하기 위해 값을 누적
for(int c = 1; c<count.length; c++) {
count[c] += count[c-1];
}
for(int i = 0; i<arr.length; i++) {
int countIndex = arr[i]-min;
int outIndex = count[countIndex]-1;
out[outIndex] = arr[i];
//값을 셋팅 후 요소의 위치값을 줄여나감
count[countIndex]--;
}
int answer = 0;
for(int i =0; i<arr.length; i++) {
if(arr[i] != out[i]) {
answer++;
}
}
return answer;
}
}
'알고리즘 > 코딩테스트' 카테고리의 다른 글
프로그래머스 네트워크 (0) | 2021.10.12 |
---|---|
리트코드 leetCode 705. Design HashSet (0) | 2021.10.11 |
프로그래머스 정수 삼각형 (0) | 2021.10.04 |
프로그래머스 N으로 표현 (0) | 2021.10.04 |
프로그래머스 단속카메라 (0) | 2021.10.01 |