๋ฌธ์
ํ์ด ๊ณผ์
0, 1, 2
๋ก ๊ตฌ์ฑ๋์ด ์๋ ๋ฐฐ์ด์ O(n)
์ ์๊ฐ ๋ณต์ก๋์ O(1)
์ ๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ํตํด ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ์ ์ฐพ๋ ๋ฌธ์ ์
๋๋ค.
์ฒ์์ ์ด๋ป๊ฒ ์ ๊ทผํด์ผํ ์ง ๊ฐ์ ๋ชป์ก์์ ๋ค๋ฅธ ์ฌ๋์ ํ์ด์ ํํธ๋ฅผ ์ป์ด ํด๊ฒฐํ ์ ์์์ต๋๋ค.
๊ฐ์ฅ ์ค์ํ ๊ฒ์ 0
์ ์ผ์ชฝ์ 2
๋ฅผ ์ค๋ฅธ์ชฝ์ ๋ฐฐ์น์์ผ์ผ ํ๋ค๋ ๊ฒ์
๋๋ค.
๋ฐ๋ผ์ ๋ฐฐ์ด์ ์ํํ๋ฉฐ 1
์ ๋ฌด์ํ๊ณ 0
๊ณผ 2
๋ฅผ ๋ง๋๋ฉด ๋ค์ด๊ฐ ๋ค์ ์์น๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ ๊ฐ์ ํฌ์ธํฐ๋ฅผ ํตํด
์์น๋ฅผ ๋ณ๊ฒฝํด์ฃผ๋ฉด O(n)
์ ํด๊ฒฐํ ์ ์์ต๋๋ค.
์ด๋ ์ฃผ์ํ ์ ์ 2
๋ฅผ ๋ฐ๊ฟ๋์ธ๋ฐ 2
๋ฅผ swap
ํ ๊ฒฝ์ฐ 0, 1, 2
์ค ํ๋์ ์ซ์๊ฐ ๋ฐ๋ ์์น๋ก ์ค๊ฒ ๋๋๋ฐ,
์ฌ๊ธฐ์ walker
๋ฅผ ๊ทธ๋๋ก ์ฆ๊ธฐ์์ผ๋ฒ๋ฆฌ๋ฉด ๊ฒฝ์ฐ์ ๋ฐ๋ผ์ ์ ๋ ฌ์ด ๋ค ๋๋์ง ์๊ณ ๋ค์ ์์น๋ก ์ฎ๊ฒจ์ง๊ฒ ๋ฉ๋๋ค.
์ด ์ ์ ์ ์ํ์ฌ 2
๋ฅผ swap
ํ ๊ฒฝ์ฐ์๋ walker
๋ฅผ ๋ฐ๋ก ์ฆ๊ฐ์์ผ ์ฃผ์ง ์๋๋ก ํฉ๋๋ค.
์ฝ๋
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var sortColors = function (nums) {
let left = 0,
right = nums.length - 1;
walker = 0;
while (walker <= right) {
if (nums[walker] === 2 && walker < right) {
[nums[walker], nums[right]] = [nums[right], nums[walker]];
right--;
} else if (nums[walker] === 0) {
[nums[walker], nums[left]] = [nums[left], nums[walker]];
left++;
walker++;
} else {
walker++;
}
}
return nums;
};
'๐ algorithm > leetcode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
LeetCode 234 - Palindrome Linked List (Easy) (0) | 2021.03.04 |
---|---|
LeetCode 309 - Best Time to Buy and Sell Stock with Cooldown (Medium) (0) | 2021.03.04 |
LeetCode 416 - Partition Equal Subset Sum (Medium) (0) | 2021.03.04 |
LeetCode 560 - Subarray Sum Equals K (Medium) (2) | 2021.03.04 |
LeetCode 752 - Open the Lock (Medium) (0) | 2021.03.04 |
๐ฌ ๋๊ธ