์ด๊ฒ์ด ์ทจ์ ์ ์ํ ์ฝ๋ฉํ ์คํธ๋ค with ํ์ด์ฌ
์ด๊ฒ์ด ์ทจ์ ์ ์ํ ์ฝ๋ฉ ํ ์คํธ๋ค with ํ์ด์ฌ - YES24
๋๋๋น ์ ์์ ์ ํ๋ธ ๋ผ์ด๋ธ ๋ฐฉ์ก https://www.youtube.com/c/dongbinnaIT ์ทจ์ค์์ด๋ผ๋ฉด ๋๊ตฌ๋ ์ ์ฌํ๊ณ ์ถ์ ์นด์นด์ค · ์ผ์ฑ์ ์ · ๋ค์ด๋ฒ · ๋ผ์ธ!์ทจ์ ์ ์ฑ๊ณต ์ด์ ๋ ์๊ณ ๋ฆฌ์ฆ ์ธํฐ๋ทฐ์ ์๋ค!IT ์ทจ์ค์
www.yes24.com
6์ฅ. ์ ๋ ฌ
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ๊ฐ์
- ์ ๋ ฌ(Sorting) : ๋ฐ์ดํฐ๋ฅผ ํน์ ํ ๊ธฐ์ค์ ๋ฐ๋ผ์ ์์๋๋ก ๋์ดํ๋ ๊ฒ
- ์ด์ง ํ์์ ์ ์ฒ๋ฆฌ ๊ณผ์
์ ํ ์ ๋ ฌ(Selection Sort)
- ๋ฐ์ดํฐ๊ฐ ๋ฌด์์๋ก ์์ ๋, ์ด ์ค์์ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ํํด ๋งจ ์์ ์๋ ๋ฐ์ดํฐ์ ๋ฐ๊พธ๊ณ , ๊ทธ๋ค์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ํํด ์์์ ๋ ๋ฒ์งธ ๋ฐ์ดํฐ์ ๋ฐ๊พธ๋ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ ๊ฒ
์ ํ ์ ๋ ฌ ๊ณผ์
Step 0. ์ด๊ธฐ ๋จ๊ณ์์๋ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋์ด ์์ง ์์ผ๋ฏ๋ก, ์ ์ฒด ์ค์์ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ํํ๋ค. ๋ฐ๋ผ์ '0'์ ์ ํํด ๋งจ ์์ '7'๊ณผ ๋ฐ๊พผ๋ค
Step 1. ์ ๋ ฌ๋ ์ฒซ ๋ฒ์งธ๋ ์ ์ธํ๊ณ ์ดํ ๋ฐ์ดํฐ ์ค์์ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ์ธ '1'์ ์ ํํ์ฌ ์ฒ๋ฆฌ๋์ง ์์ ๋ฐ์ดํฐ ์ค ๊ฐ์ฅ ์์ ์๋ ๋ฐ์ดํฐ '5'์ ๋ฐ๊พผ๋ค
Step 2. ์ ๋ ฌ๋ ์ฒซ ๋ฒ์งธ๋ ์ ์ธํ๊ณ ์ดํ ๋ฐ์ดํฐ ์ค์์ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ์ธ '1'์ ์ ํํ์ฌ ์ฒ๋ฆฌ๋์ง ์์ ๋ฐ์ดํฐ ์ค ๊ฐ์ฅ ์์ ์๋ ๋ฐ์ดํฐ '5'์ ๋ฐ๊พผ๋ค
Step 3. ์ ๋ ฌ๋ ์ฒซ ๋ฒ์งธ๋ ์ ์ธํ๊ณ ์ดํ ๋ฐ์ดํฐ ์ค์์ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ์ธ '1'์ ์ ํํ์ฌ ์ฒ๋ฆฌ๋์ง ์์ ๋ฐ์ดํฐ ์ค ๊ฐ์ฅ ์์ ์๋ ๋ฐ์ดํฐ '5'์ ๋ฐ๊พผ๋ค
-- ์ค๋ต --
Step 8.
Step 9. ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ๋ฅผ ์์ผ๋ก ๋ณด๋ด๋ ๊ณผ์ ์ 9๋ฒ ๋ฐ๋ณตํ ์ํ๋ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ ๋ง์ง๋ง ๋ฐ์ดํฐ๋ ๊ฐ๋งํ ๋์ด๋ ์ด๋ฏธ ์ ๋ ฌ๋ ์ํ์ด๋ค. ๋ฐ๋ผ์ ์ด ๋จ๊ณ์์ ์ ๋ ฌ์ ๋ง์น ์ ์๋ค.
- ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ๋ฅผ ์์ผ๋ก ๋ณด๋ด๋ ๊ณผ์ ์ N - 1๋ฒ ๋ฐ๋ณตํ๋ฉด ์ ๋ ฌ์ด ์๋ฃ๋๋ค.
array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]
for i in range(len(array)):
min_index = i # ๊ฐ์ฅ ์์ ์์์ ์ธ๋ฑ์ค
for j in range(i + 1, len(array)):
if array[min_index] > array[j]:
min_index = j
array[i], array[min_index] = array[min_index], array[i] # ์ค์ํ
print(array)
# ์ถ๋ ฅ
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
์ค์ํ(Swap)
- ์ค์ํ(swap) : ํน์ ํ ๋ฆฌ์คํธ๊ฐ ์ฃผ์ด์ก์ ๋ ๋ ๋ณ์์ ์์น๋ฅผ ๋ณ๊ฒฝํ๋ ์์ ์ ์๋ฏธ
# 0 ์ธ๋ฑ์ค์ 1 ์ธ๋ฑ์ค์ ์์ ๊ต์ฒดํ๊ธฐ
array = [3, 5]
array[0], array[1] = array[1], array[0]
print(array)
# ์ถ๋ ฅ
# [5, 3]
์ ํ ์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋
- O(N²) : 2์ค ๋ฐ๋ณต๋ฌธ ์ฌ์ฉ๋์๊ธฐ ๋๋ฌธ
- ๋ฐ์ดํฐ์ ๊ฐ์๊ฐ 10,000๊ฐ ์ด์์ด๋ฉด ์๋๊ฐ ๋๋ ค์ง
์ฝ์ ์ ๋ ฌ(Insertion Sort)
- ๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ํ์ธํ๋ฉฐ, ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ ์์น์ ์ฝ์ ํ์ฌ ์ ๋ ฌํ๋ ๊ฒ
- ์ ํ ์ ๋ ฌ์ ๋นํด ์คํ ์๊ฐ ์ธก๋ฉด์์ ๋ ํจ์จ์ ์ด๋ค
์ฝ์ ์ ๋ ฌ ๊ณผ์
Step 0. ์ฒซ ๋ฒ์งธ ๋ฐ์ดํฐ 7์ ๊ทธ ์์ฒด๋ก ์ ๋ ฌ์ด ๋์ด ์๋ค๊ณ ํ๋จํ๊ณ , ๋ ๋ฒ์งธ ๋ฐ์ดํฐ์ธ 5๊ฐ ์ด๋ค ์์น๋ก ๋ค์ด๊ฐ์ง ํ๋จํ๋ค. 7์ ์ผ์ชฝ์ผ๋ก ๋ค์ด๊ฐ๊ฑฐ๋ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ค์ด๊ฐ๋ ๋ ๊ฒฝ์ฐ๋ง ์กด์ฌํ๋ค. ์ค๋ฆ์ฐจ์ ์ ๋ ฌ ํ๊ณ ์ํ๋ฏ๋ก 7์ ์ผ์ชฝ์ ์ฝ์ ํ๋ค.
Step 1. ์ด์ด์ 9๊ฐ ์ด๋ค ์์น์ ๋ค์ด๊ฐ์ง ํ๋จํ๋ค. ์ฝ์ ๋ ์ ์๋ ์์น๋ ์ด 3๊ฐ์ง์ด๋ฉฐ ํ์ฌ 9์ 5์ 7๋ณด๋ค ํฌ๊ธฐ ๋๋ฌธ์ ์๋ ์๋ฆฌ ๊ทธ๋๋ก ๋๋ค.
Step 2. ์ด์ด์ 0์ด ์ด๋ค ์์น์ ๋ค์ด๊ฐ์ง ํ๋จํ๋ค. 0์ 5, 7, 9์ ๋น๊ตํ์ ๋ ๊ฐ์ฅ ์๊ธฐ ๋๋ฌธ์ ์ฒซ๋ฒ์งธ ์์น์ ์ฝ์ ํ๋ค.
Step 3. ์ด์ด์ 3์ด ์ด๋ค ์์น์ ๋ค์ด๊ฐ์ง ํ๋จํ๋ค. 0๊ณผ 5 ์ฌ์ด์ ์ฝ์ ํ๋ค.
-- ์ค๋ต --
Step 7.
Step 8.
Step 9. ์ด์ ๊ฐ์ด ์ ์ ํ ์์น์ ์ฝ์ ํ๋ ๊ณผ์ ์ N - 1๋ฒ ๋ฐ๋ณตํ๊ฒ ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
- ์ ๋ ฌ์ด ์ด๋ฃจ์์ง ์์๋ ํญ์ ์ค๋ฆ์ฐจ์์ ์ ์งํ๊ณ ์๋ค
array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]
for i in range(len(array)):
for j in range(i, 0, -1): # ์ธ๋ฑ์ค i๋ถํฐ 1๊น์ง ๊ฐ์ํ๋ฉฐ ๋ฐ๋ณตํ๋ ๋ฌธ๋ฒ
if array[j] < array[j - 1]: # ํ ์นธ์ฉ ์ผ์ชฝ์ผ๋ก ์ด๋
array[j], array[j - 1] = array[j - 1], array[j]
else: # ์๊ธฐ๋ณด๋ค ์์ ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ฉด ๊ทธ ์์น์์ ๋ฉ์ถค
break
print(array)
# ์ถ๋ ฅ
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
์ฝ์ ์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋
- O(N²) : 2์ค ๋ฐ๋ณต๋ฌธ ์ฌ์ฉ๋์๊ธฐ ๋๋ฌธ
- ๋ฆฌ์คํธ์ ๋ฐ์ดํฐ๊ฐ ๊ฑฐ์ ์ ๋ ฌ๋์ด ์๋ ์ต์ ์ ๊ฒฝ์ฐ O(N)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
ํต ์ ๋ ฌ(Quick Sort)
- ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ค ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ
- ๊ธฐ์ค ๋ฐ์ดํฐ๋ฅผ ์ค์ ํ๊ณ ๊ทธ ๊ธฐ์ค๋ณด๋ค ํฐ ๋ฐ์ดํฐ์ ์์ ๋ฐ์ดํฐ์ ์์น๋ฅผ ๋ฐ๊พธ์ด ์ ๋ ฌํ๋ ๊ฒ
- ํผ๋ฒ(Pivot) ์ฌ์ฉ : ๊ตํํ๊ธฐ ์ํ ๊ธฐ์ค์ ํํ. ๋ฆฌ์คํธ์์ ์ฒซ ๋ฒ์งธ ๋ฐ์ดํฐ๋ฅผ ํผ๋ฒ์ผ๋ก ์ ํ๋ค
ํต ์ ๋ ฌ ๊ณผ์
< ํํธ 1 >
Step 0. ๋ฆฌ์คํธ์ ์ฒซ ๋ฒ์งธ ๋ฐ์ดํฐ๋ฅผ ํผ๋ฒ์ผ๋ก ์ค์ ํ๋ฏ๋ก ํผ๋ฒ์ 5์ด๋ค. ์ดํ์ ์ผ์ชฝ์์๋ถํฐ 5๋ณด๋ค ํฐ ๋ฐ์ดํฐ๋ฅผ ์ ํํ๋ฏ๋ก 7์ด ์ ํ๋๊ณ , ์ค๋ฅธ์ชฝ์์๋ถํฐ 5๋ณด๋ค ์์ ๋ฐ์ดํฐ๋ฅผ ์ ํํ๋ฏ๋ก 4๊ฐ ์ ํ๋๋ค. ๋ ๋ฐ์ดํฐ์ ์์น๋ฅผ ์๋ก ๋ณ๊ฒฝํ๋ค.
Step 1. ๊ทธ ๋ค์ ๋ค์ ํผ๋ฒ๋ณด๋ค ํฐ ๋ฐ์ดํฐ์ ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ฐ ์ฐพ๋๋ค. ์ฐพ์ ๋ค์๋ ๋ ๊ฐ์ ์์น๋ฅผ ์๋ก ๋ณ๊ฒฝํ๋๋ฐ, ํ์ฌ 9์ 2๊ฐ ์ ํ๋์์ผ๋ฏ๋ก ์ด ๋ ๋ฐ์ดํฐ์ ์์น๋ฅผ ์๋ก ๋ณ๊ฒฝํ๋ค.
Step 2. ๊ทธ ๋ค์ ๋ค์ ํผ๋ฒ๋ณด๋ค ํฐ ๋ฐ์ดํฐ์ ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ฐ ์ฐพ๋๋ค. ๋จ ํ์ฌ ์ผ์ชฝ์์๋ถํฐ ์ฐพ๋ ๊ฐ๊ณผ ์ค๋ฅธ์ชฝ์์๋ถํฐ ์ฐพ๋ ๊ฐ์ ์์น๊ฐ ์๋ก ์๊ฐ๋ฆฐ ๊ฒ์ ์ ์ ์๋ค. ์ด๋ ๊ฒ ๋ ๊ฐ์ด ์๊ฐ๋ฆฐ ๊ฒฝ์ฐ์๋ ์์ ๋ฐ์ดํฐ์ ํผ๋ฒ์ ์์น๋ฅผ ์๋ก ๋ณ๊ฒฝํ๋ค. ์ฆ, ์์ ๋ฐ์ดํฐ์ธ 1๊ณผ ํผ๋ฒ์ธ 5์ ์์น๋ฅผ ์๋ก ๋ณ๊ฒฝํ์ฌ ๋ถํ ์ ์ํํ๋ค.
Step 3. ๋ถํ ์๋ฃ
์ด์ ๊ฐ์ด ํผ๋ฒ์ด ์ด๋ํ ์ํ์์ 5์ ์ผ์ชฝ์ ์๋ ๋ฐ์ดํฐ๋ ๋ชจ๋ 5๋ณด๋ค ์๊ณ , ์ค๋ฅธ์ชฝ์ ๋ชจ๋ 5๋ณด๋ค ํฌ๋ค. ์ด๋ ๊ฒ ํผ๋ฒ์ ์ผ์ชฝ์๋ ํผ๋ฒ๋ณด๋ค ์์ ๋ฐ์ดํฐ๊ฐ ์์นํ๊ณ , ํผ๋ฒ์ ์ค๋ฅธ์ชฝ์๋ ํผ๋ฒ๋ณด๋ค ํฐ ๋ฐ์ดํฐ๊ฐ ์์นํ๋๋ก ํ๋ ์์ ์ ๋ถํ (Divide) ํน์ ํํฐ์ (Partition)์ด๋ผ๊ณ ํ๋ค.
< ํํธ 2 >
์ผ์ชฝ ๋ฆฌ์คํธ์์ ์์ ๊ฐ์ ์ ๋ ฌ์ ์งํํ๋ค.
< ํํธ 3 >
์ค๋ฅธ์ชฝ ๋ฆฌ์คํธ์์ ์์ ๊ฐ์ ์ ๋ ฌ์ ์งํํ๋ค.
- ์ฌ๊ทํจ์๋ก ์์ฑํ์ ๋, ๊ตฌํ์ด ๋งค์ฐ ๊ฐ๊ฒฐํด์ง๋ค. ํต ์ ๋ ฌ์ด ๋๋๋ ์กฐ๊ฑด์ ํ์ฌ ๋ฆฌ์คํธ์ ๋ฐ์ดํฐ ๊ฐ์๊ฐ 1์ธ ๊ฒฝ์ฐ์ด๋ค.
array = [5, 7, 9, 0, 3, 1, 6, 2, 4, 8]
def quick_sort(array, start, end):
if start >= end: # ์์๊ฐ 1๊ฐ์ธ ๊ฒฝ์ฐ ์ข
๋ฃ
return
pivot = start # ํผ๋ฒ์ ์ฒซ ๋ฒ์งธ ์์
left = start + 1
right = end
while left <= right:
# ํผ๋ฒ๋ณด๋ค ํฐ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๋๊น์ง ๋ฐ๋ณต
while left <= end and array[left] <= array[pivot]:
left += 1
# ํผ๋ฒ๋ณด๋ค ์์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๋๊น์ง ๋ฐ๋ณต
while right > start and array[right] >= array[pivot]:
right -= 1
if left > right: # ์๊ฐ๋ ธ๋ค๋ฉด ์์ ๋ฐ์ดํฐ์ ํผ๋ฒ์ ๊ต์ฒด
array[right], array[pivot] = array[pivot], array[right]
else: # ์๊ฐ๋ฆฌ์ง ์์๋ค๋ฉด ์์ ๋ฐ์ดํฐ์ ํฐ ๋ฐ์ดํฐ๋ฅผ ๊ต์ฒด
array[left], array[right] = array[right], array[left]
# ๋ถํ ์ดํ ์ผ์ชฝ ๋ถ๋ถ๊ณผ ์ค๋ฅธ์ชฝ ๋ถ๋ถ์์ ๊ฐ๊ฐ ์ ๋ ฌ ์ํ
quick_sort(array, start, right - 1)
quick_sort(array, right + 1, end)
quick_sort(array, 0, len(array) - 1)
print(array)
# ์ถ๋ ฅ
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- ํ์ด์ฌ์ ์ฅ์ ์ ์ด๋ฆฐ ํต ์ ๋ ฌ ์์ค์ฝ๋
array = [5, 7, 9, 0, 3, 1, 6, 2, 4, 8]
def quick_sort(array):
# ๋ฆฌ์คํธ๊ฐ ํ๋ ์ดํ์ ์์๋ง์ ๋ด๊ณ ์๋ค๋ฉด ์ข
๋ฃ
if len(array) <= 1:
return array
pivot = array[0] # ํผ๋ฒ์ ์ฒซ ๋ฒ์งธ ์์
tail = array[1:] # ํผ๋ฒ์ ์ ์ธํ ๋ฆฌ์คํธ
left_side = [x for x in tail if x <= pivot] # ๋ถํ ๋ ์ผ์ชฝ ๋ถ๋ถ
right_side = [x for x in tail if x > pivot] # ๋ถํ ๋ ์ค๋ฅธ์ชฝ ๋ถ๋ถ
# ๋ถํ ์ดํ ์ผ์ชฝ ๋ถ๋ถ๊ณผ ์ค๋ฅธ์ชฝ ๋ถ๋ถ์์ ๊ฐ๊ฐ ์ ๋ ฌ์ ์ํํ๊ณ , ์ ์ฒด ๋ฆฌ์คํธ๋ฅผ ๋ฐํ
return quick_sort(left_side) + [pivot] + quick_sort(right_side)
print(quick_sort(array))
# ์ถ๋ ฅ
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
ํต ์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋
- ํ๊ท ์๊ฐ๋ณต์ก๋๋ O(NlogN), ์ต์ ์ ๊ฒฝ์ฐ๋ O(N²)
- ์ด๋ฏธ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋์ด ์๋ ๊ฒฝ์ฐ์๋ ๋งค์ฐ ๋๋ฆฌ๊ฒ ๋์ํ๋ค
๊ณ์ ์ ๋ ฌ(Count Sort)
- ํน์ ํ ์กฐ๊ฑด์ด ๋ถํฉํ ๋๋ง ์ฌ์ฉํ ์ ์์ง๋ง ๋งค์ฐ ๋น ๋ฅธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
- ์ต์ ์ ๊ฒฝ์ฐ์๋ ์ํ์๊ฐ O(๋ฐ์ดํฐ์ ๊ฐ์ + ๋ฐ์ดํฐ์ ์ต๋๊ฐ) ์ ๋ณด์ฅํ๋ค.
- ํน์ ํ ์กฐ๊ฑด : ๋ฐ์ดํฐ์ ํฌ๊ธฐ ๋ฒ์๊ฐ ์ ํ๋์ด ์ ์ ํํ๋ก ํํํ ์ ์์ ๋
๊ณ์ ์ ๋ ฌ ๊ณผ์
- ๋ณ๋์ ๋ฆฌ์คํธ๋ฅผ ์ ์ธํ๊ณ ๊ทธ ์์ ์ ๋ ฌ์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๋๋ค. ์ฒ์์๋ ๋ฆฌ์คํธ์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ 0์ด ๋๋๋ก ์ด๊ธฐํ ํ๋ค.
Step 0. ์ด๊ธฐ ๋จ๊ณ : 7 5 9 0 3 1 6 2 9 1 4 8 0 5 2
Step 1. 7 5 9 0 3 1 6 2 9 1 4 8 0 5 2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
Step 2. 7 5 9 0 3 1 6 2 9 1 4 8 0 5 2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
Step 3. 7 5 9 0 3 1 6 2 9 1 4 8 0 5 2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 |
-- ๊ณผ์ ๋ฐ๋ณต --
Step 14. 7 5 9 0 3 1 6 2 9 1 4 8 0 5 2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
0 | 2 | 1 | 1 | 1 | 2 | 1 | 1 | 1 | 2 |
Step 2. 7 5 9 0 3 1 6 2 9 1 4 8 0 5 2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
2 | 2 | 2 | 1 | 1 | 2 | 1 | 1 | 1 | 2 |
- ๊ฒฐ๊ณผ์ ์ผ๋ก ์์ ๊ฐ์ด ๋ฆฌ์คํธ์๋ ๊ฐ ๋ฐ์ดํฐ๊ฐ ๋ช ๋ฒ ๋ฑ์ฅํ๋์ง ๊ทธ ํ์๊ฐ ๊ธฐ๋ก๋๋ค. ๋ฆฌ์คํธ์ ์ฒซ ๋ฒ์งธ ๋ฐ์ดํฐ๋ถํฐ ํ๋์ฉ ๊ทธ ๊ฐ๋งํผ ์ธ๋ฑ์ค๋ฅผ ์ถ๋ ฅํ๋ฉด ์ ๋ ฌ๋ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์๋ค.
--> 0 0 1 1 2 2 3 4 5 5 6 7 8 9 9
# ๋ชจ๋ ์์์ ๊ฐ์ด 0 ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๋ค๊ณ ๊ฐ์
array = [7, 5, 9, 0, 3, 1, 6, 2, 9, 1, 4, 8, 0, 5, 2]
# ๋ชจ๋ ๋ฒ์๋ฅผ ํฌํจํ๋ ๋ฆฌ์คํธ ์ ์ธ(๋ชจ๋ ๊ฐ์ 0์ผ๋ก ์ด๊ธฐํ)
count = [0] * (max(array) + 1)
for i in range(len(array)):
count[array[i]] += 1 # ๊ฐ ๋ฐ์ดํฐ์ ํด๋นํ๋ ์ธ๋ฑ์ค์ ๊ฐ ์ฆ๊ฐ
for i in range(len(count)): # ๋ฆฌ์คํธ์ ๊ธฐ๋ก๋ ์ ๋ ฌ ์ ๋ณด ํ์ธ
for j in range(count[i]):
print(i, end=' ') # ๋์ด์ฐ๊ธฐ๋ฅผ ๊ตฌ๋ถ์ผ๋ก ๋ฑ์ฅํ ํ์๋งํผ ์ธ๋ฑ์ค ์ถ๋ ฅ
# ์ถ๋ ฅ
# 0 0 1 1 2 2 3 4 5 5 6 7 8 9 9
๊ณ์ ์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋์ ๊ณต๊ฐ ๋ณต์ก๋
๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์์ ์ ์์ธ ์ํฉ์์ ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ N, ๋ฐ์ดํฐ ์ค ์ต๋๊ฐ์ ํฌ๊ธฐ๋ฅผ K๋ผ๊ณ ํ ๋
- ์๊ฐ ๋ณต์ก๋ : O(N + K)
- ๊ณต๊ฐ ๋ณต์ก๋ : O(N + K)