์ฝ๋
class Solution {
public void sortColors(int[] nums) {
int low = 0, mid = 0, high = nums.length - 1;
while (mid <= high) {
if (nums[mid] == 0) {
// 0์ ๋ฐ๊ฒฌํ๋ฉด low์ mid๋ฅผ swapํ๊ณ ๋ ๋ค ์ฆ๊ฐ
int temp = nums[low];
nums[low] = nums[mid];
nums[mid] = temp;
low++;
mid++;
} else if (nums[mid] == 1) {
// 1์ด๋ฉด ๊ทธ๋ฅ mid ์ฆ๊ฐ
mid++;
} else if (nums[mid] == 2) {
// 2๋ฅผ ๋ฐ๊ฒฌํ๋ฉด mid์ high๋ฅผ swapํ๊ณ high๋ง ๊ฐ์
int temp = nums[mid];
nums[mid] = nums[high];
nums[high] = temp;
high--;
}
}
}
}
Java
๋ณต์ฌ
1.
ํฌ์ธํฐ:
โข
low: 0 (red)์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
โข
mid: ํ์ฌ ์์๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
โข
high: 2 (blue)์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
2.
์๊ณ ๋ฆฌ์ฆ:
mid ํฌ์ธํฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์ ๋ฐฐ์ด์ ์ํํ๋ฉด์, ์ธ ๊ฐ์ง ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ ์ ํ ๊ฐ์ ๊ตํํ๋ค.
โข
nums[mid] == 0: nums[mid]
nums[low] ๊ตํ, low์ mid๋ฅผ ์ฆ๊ฐ
โข
nums[mid] == 1: mid๋ฅผ ์ฆ๊ฐ
โข
nums[mid] == 2: nums[mid]
nums[high] ๊ตํ, high๋ฅผ ๊ฐ์
โข
์ด ๊ณผ์ ์ mid๊ฐ high๋ฅผ ๋์ง ์์ ๋๊น์ง ๋ฐ๋ณต
๋ฌธ์ ํด๊ฒฐ ์์ด๋์ด
Dutch National Flag Problem์ด๋ผ๋ 3ํฌ์ธํฐ ๊ตํ ๋ฐฉ์์ ๋ฌธ์ ๋ฅผ ํ์ฉํ๋ฉด ๋๋ค.
์ด ์๊ณ ๋ฆฌ์ฆ ํ์ด ๋ฐฉ์์ ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฌ์ฉํ์ง ์๊ณ ์ ์๋ฆฌ์์ ๋ฐฐ์ด์ ์ ๋ ฌํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
- ์๊ฐ ๋ณต์ก๋: O(n)
- ๊ณต๊ฐ ๋ณต์ก๋: O(1)