1. ๋ฌธ์ ์ค๋ช ๐
๋ฐฐ์ด์ ์ ๋ ฌํด์, ์ธ์ ํ ๋ ๊ฐ์ ์ฐจ์ ์ต๋๊ฐ์ ๋ฐํํด๋ผ
2. ์ ๊ทผ ๋ฐฉ์ ๐๏ธ
KEY WORD
: RADIX SORT
ํด๋น ๋ฌธ์ ๋ java์ native ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํด๋ ๋์ง๋ง, ๊ธฐ์ ์ ๋ ฌ(Radix-sort)
๋ฅผ ํ์ฉํด๋ณด๊ณ ์ถ์ด์, ํด๋น ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํด์ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์๋ค.
๊ทธ์ ์ ์ ๊ทธ๋๋ก ๊ตฌํํ ๊ฒ ๋ฟ์ด๋ผ, ๋ฐ๋ก ์ ๊ทผ ๋ฐฉ์์ ์ค๋ช ํ ๊ฒ์ด ์๋ค. Radix-sort์ ๋ํด ๋ชจ๋ฅด์๋ ๋ถ๋ค์ ๋ค์ ๋งํฌ์ ๋ด์ฉ์ด ์ ํ ์์ผ๋ ํ๋ฒ ๋ณด๊ณ ์ค๋ ๊ฒ์ ์ถ์ฒ ๋๋ฆฐ๋ค.
https://dalcheonroadhead.tistory.com/558
3. ์ฝ๋ ์๊ฐ ๐
import java.util.*;
class Solution {
public int maximumGap(int[] nums) {
if(nums.length < 2) return 0;
int [] arr = new int [nums.length + 1];
for(int i = 0; i < nums.length; i++){
arr[i+1] = nums[i];
}
radix_sort(arr, 0);
int max_GAP = 0;
for(int i = 2; i < arr.length; i++){
max_GAP = Math.max(max_GAP, arr[i]-arr[i-1]);
}
return max_GAP;
}
private void radix_sort (int [] arr, int digit) {
int [] nums = new int [10];
int [] result = new int [arr.length];
// 1. ํ ์๋ฆฟ์๋ฅผ ํตํด ์๋ฆฟ์ ๋ฐฐ์ด ๋ง๋ค๊ธฐ
for (int i = 1; i < arr.length; i++){
nums[(int) (arr[i] / (Math.pow(10, digit))) % 10]++;
}
// 0. ๊ธฐ์ ์กฐ๊ฑด
if(digit == 9) return;
// 2. ๋์ ํฉ ๋ง๋ค๊ธฐ
for (int i = 1; i < nums.length; i++) {
nums[i] += nums[i-1];
}
// 3. ์๋ฆฟ์ ๋ฐฐ์ด์ ํ์ฉํด ๊ฐ ์ ๋ ฌ
for (int i = arr.length-1; i >= 0; i--) {
int now_digit = (int)(arr[i]/Math.pow(10,digit))%10;
result[nums[now_digit]] = arr[i];
nums[now_digit]--;
}
for (int i = 1; i < result.length; i++) {
arr[i] = result[i];
}
radix_sort(arr, digit+1);
}
}
4. ๋ฐฐ์ด ๊ฒ๋ค ๐ฏ
(1) ์ฐฉ๊ฐํ๊ณ ์๋ ๊ธฐ์ ์กฐ๊ฑด
์ฒ์์ ๊ธฐ์ ์กฐ๊ฑด์
if(nums[0] == arr.length -1) return;
์ผ๋ก ๋ง๋ค์๋ค. ์ฆ '๋ชจ๋ ์๊ฐ ํ์ฌ ์๋ฆฟ์๋ฅผ ์ฒดํฌํ์ ๋, ๊ฐ์ด 0์ด๋ฉด ์ข
๋ฃํ๋ค.' ์ ๋ป์ด๋ค. ์ธ๋ป ๋ณด๋ฉด ๋ง๋ ๊ฒ ๊ฐ๋ค. ์๋ฅผ ๋ค์ด [1,2,3,4,5,6]
์ด ์๋ค๊ณ ์น๋ฉด 10์ ์๋ฆฟ์๋ฅผ ํ์ธํ ๋๋ถํฐ ๋ชจ๋ ์์ ์๋ฆฟ์๊ฐ 0์ด ๋๋ฏ๋ก ๋ ์ด์ ๊ณ์ฐํ ํ์๊ฐ ์๋ค๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง ๋ฆฌํธ ์ฝ๋๋ฅผ ํตํด ๋ค์ ๋ฐ๋ก๋ฅผ ์ฐพ์ ์ ์์๋ค.
[1, 10000000]
ํด๋น ์
๋ ฅ๊ฐ์, 10์ ์๋ฆฌ์์ ๋ชจ๋ ์์์ ์๋ฆฟ์๊ฐ 0์ด ๋๋ค. 1์ ์๋ฆฌ์์ ์ ๋ ฌ ํ์ ์ [10000000, 1]
์ด ๋์ด๋ฒ๋ฆผ์ผ๋ก, ์ ๋ ฌ์ 10์ ์๋ฆฌ์์ ๋ฉ์ถ๋ฉด ์ค๋ต์ด ๋์ด๋ฒ๋ฆฐ๋ค!
๋ค์ ์๊ฐํด๋ณด๋ ๊ธฐ์ ์กฐ๊ฑด์ ๊ณจ๋จธ๋ฆฌ๋ฅผ ์ ํ์๊ฐ ์์๋ค. ๊ธฐ์ ์ ๋ ฌ
์ ์ฅ์ ์ ์ต๋ ์๋ฆฟ์ ๋งํผ ๋ฐ๋ณตํ๋ฉด ๊ณ์ฐ์ด ๋๋๋ค๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ์ฌ๊ท๋ ์ต๊ณ ์๋ฆฟ์ + 1 ๊น์ง๋ง ํด์ฃผ๋ฉด ๋๋ค. ๋ฐ๋ผ์ ๋ฌธ์ ์์ ์ฃผ์ด์ง๋ ์ต๋๊ฐ๋ง ์ฒดํฌํ๋ฉด ๋๊ฒ ๋ค.