2024년 6월 12일 (수)
Leetcode daily problem
https://leetcode.com/problems/sort-colors/?envType=daily-question&envId=2024-06-12
빨간색, 흰색 또는 파란색으로 색상이 지정된 n개의 개체가 포함된 배열 nums가 주어지면 동일한 색상의 개체가 빨간색, 흰색, 파란색 순서로 인접하도록 해당 위치에서 정렬한다.
여기서는 정수 0, 1, 2를 사용하여 각각 빨간색, 흰색, 파란색을 나타낸다.
라이브러리의 정렬 기능을 사용하지 않고 이 문제를 해결해야 한다.
Dutch National Flag Algorithm
<Dutch National Flag Algorithm (네덜란드 국기 알고리즘)>
class Solution:
def sortColors(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
low, mid, high = 0, 0, len(nums)-1
while mid <= high:
if nums[mid]==0:
nums[mid], nums[low] = nums[low], nums[mid]
mid +=1
low +=1
elif nums[mid] == 1:
mid +=1
else:
nums[mid], nums[high] = nums[high], nums[mid]
high-=1
시간 복잡도
주어진 배열을 한 번 탐색하면서 정렬을 마무리하므로 시간복잡도는 O(n) 이다.
공간 복잡도
배열을 탐색할 때 추가적인 공간을 사용하지 않아 공간복잡도는 O(1) 이다.