< 문제 간단설명 >
더보기
문제는 0, 1, 2로 이루어진 배열을 다음 규칙에 따라 정렬하라는 문제이다.
- 0은 배열의 앞쪽에 배치
- 1은 그 다음에 배치
- 2는 배열의 끝쪽에 배치
그냥 쉽게 오름차순으로 정렬하면된다.
하지만 다음과 같은 제한사항이 있다.
- 공간 복잡도 O(1)
- 원소의 총 개수는 n이고, 1 <= n <= 300
< 코드 >
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var sortColors = function (nums) {
const COLOR = {
RED: 0,
WHITE: 1,
BLUE: 2,
};
let left = 0;
let right = nums.length - 1;
let mid = 0;
while (mid <= right) {
// mid가 0일 경우, 가장 앞에 와야하기 때문에 left랑 교환한다.
if (nums[mid] === COLOR.RED) {
[nums[left], nums[mid]] = [nums[mid], nums[left]];
left++;
mid++;
continue;
}
// mid가 1일 경우, 중간에 오는게 맞기 때문에 mid만 1 증가시킨다.
if (nums[mid] === COLOR.WHITE) {
mid++;
continue;
}
// mid가 2일 경우, 가장 뒤에 와야하기 때문에 right랑 교환한다.
if (nums[mid] === COLOR.BLUE) {
[nums[mid], nums[right]] = [nums[right], nums[mid]];
right--;
continue;
}
}
return nums;
};