๋ฌธ์
ํ์ด ๊ณผ์
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 |
๐ฌ ๋๊ธ