์ ๋ ฌ์ด๋ ๋ฐ์ดํฐ๋ฅผ ํน์ ํ ๊ธฐ์ค์ ๋ฐ๋ผ์ ์์๋๋ก ๋์ดํ๋ ๊ฒ
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ง ํ์์ ์ ์ฒ๋ฆฌ ๊ณผ์ ์ด๊ธฐ๋ ํจ
์ ํ ์ ๋ ฌ, ์ฝ์ ์ ๋ ฌ, ํต ์ ๋ ฌ, ๊ณ์ ์ ๋ ฌ
์ฐธ๊ณ ) ํ์ด์ฌ์์๋ ํน์ ํ ๋ฆฌ์คํธ์ ์์๋ฅผ ๋ค์ง๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํจ
ย ย ย ย ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ ์ํํ ๋ค ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ง๊ธฐํ์ฌ ๋ง๋ค ์ ์์
๋งค๋ฒ '๊ฐ์ฅ ์์ ๊ฒ์ ์ ํ'ํ๋ค๋ ์๋ฏธ์ ์ ํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
๋ฐ์ดํฐ๊ฐ ๋ฌด์์๋ก ์ฌ๋ฌ ๊ฐ ์์ ๋, ์ด ์ค์์ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ํํด ๋งจ ์์ ์๋ ๋ฐ์ดํฐ์ ๋ฐ๊พธ๊ณ , ๊ทธ๋ค์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ํํด ์์์ ๋ ๋ฒ์งธ ๋ฐ์ดํฐ์ ๋ฐ๊พธ๋ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ ๊ฐ์ฅ ์์์ ์ธ ๋ฐฉ๋ฒ
๊ฐ์ฅ ์์ ๋ฐ์ดํฐ๋ฅผ ์์ผ๋ก ๋ณด๋ด๋ ๊ณผ์ ์ 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)
์ฐธ๊ณ ) ์ค์ํ๋ ํน์ ํ ๋ฆฌ์คํธ๊ฐ ์ฃผ์ด์ก์ ๋ ๋ ๋ณ์์ ์์น๋ฅผ ๋ณ๊ฒฝํ๋ ์์
ํ์ด์ฌ์์๋ ์๋์ ๊ฐ์ด ๊ฐ๋จํ ๋ฆฌ์คํธ ๋ด ๋ ์์์ ์์น ๋ณ๊ฒฝ ๊ฐ๋ฅ
array = [3, 5]
array[0], array[1] = array[1], array[0]
# ๊ฒฐ๊ณผ
# [5, 3]
N - 1๋ฒ ๋งํผ ๊ฐ์ฅ ์์ ์๋ฅผ ์ฐพ์์ ๋งจ ์์ผ๋ก ๋ณด๋ด์ผ ํ๋ฉฐ ๋งค๋ฒ ๊ฐ์ฅ ์์ ์๋ฅผ ์ฐพ๊ธฐ ์ํด ๋น๊ต ์ฐ์ฐ์ด ํ์
โ N + (N - 1) + (N - 2) + ยทยทยท + 2 = N x (N + 1) / 2๋ฒ์ ์ฐ์ฐ์ ์ํํ๋ค๊ณ ๊ฐ์
์ฆ (Nยฒ + N) / 2๋ก ํํํ ์ ์๊ณ ๋น
์ค ํ๊ธฐ๋ฒ์ผ๋ก O(Nยฒ)์ด๋ผ๊ณ ํํํ ์ ์์
์ ํ ์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋ = O(Nยฒ)
๊ธฐ๋ณธ ์ ๋ ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํด ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋น๊ตํ์ ๋ ๋งค์ฐ ๋นํจ์จ์ ์
๋ค๋ง, ํน์ ํ ๋ฆฌ์คํธ์์ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ์ผ์ด ์ฝ๋ฉ ํ
์คํธ์์ ์ฆ๊ธฐ ๋๋ฌธ์ ์ ํ ์ ๋ ฌ ์์ค์ฝ๋ ํํ์ ์ต์ํด์ง์
ํน์ ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ ์์น์ '์ฝ์
'ํ๋ค๋ ์๋ฏธ์ ์ฝ์
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ํ์ธํ๋ฉฐ, ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ ์์น์ ์ฝ์
ํจ
ํน์ ํ ๋ฐ์ดํฐ๊ฐ ์ ์ ํ ์์น์ ๋ค์ด๊ฐ๊ธฐ ์ด์ ์, ๊ทธ ์๊น์ง์ ๋ฐ์ดํฐ๋ ์ด๋ฏธ ์ ๋ ฌ๋์ด ์๋ค๊ณ ๊ฐ์ ํจ
# ์ฝ์
์ ๋ ฌ ์์ค์ฝ๋
array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]
for i in range(1, 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)
[4] ย [6] ย [8] ย [1] ย [2] ย [7] ย [3] ย [5]
1. ์ฒซ ๋ฒ์งธ ๋ฐ์ดํฐ '4'์ ๊ทธ ์์ฒด๋ก ์ ๋ ฌ๋์ด ์๋ค๊ณ ํ๋จํจ
2. ๋ ๋ฒ์งธ ๋ฐ์ดํฐ์ธ '6'์ด ์ด๋ค ์์น๋ก ๋ค์ด๊ฐ์ง ํ๋จํจ
ย '4'์ ์ผ์ชฝ ํน์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ค์ด๊ฐ๋ ๋ ๊ฒฝ์ฐ๋ง ์กด์ฌํจ
ย => ์๋ ์๋ฆฌ ๊ทธ๋๋ก ๋ ('4'์ ์ค๋ฅธ์ชฝ์ ์ฝ์
)
[4] ย [6] ย [8] ย [1] ย [2] ย [7] ย [3] ย [5]
'8'์ด ์ด๋ค ์์น์ ๋ค์ด๊ฐ์ง ํ๋จํจ
ย ์ฝ์
๋ ์ ์๋ ์์น๋ ์ด 3๊ฐ์ง ('4'์ ์ผ์ชฝ, '4'์ '6' ์ฌ์ด, '6'์ ์ค๋ฅธ์ชฝ)
ย => '8'์ '4'์ '6'๋ณด๋ค ํฌ๊ธฐ ๋๋ฌธ์ ์๋ ์๋ฆฌ ๊ทธ๋๋ก ๋
[4] ย [6] ย [8] ย [1] ย [2] ย [7] ย [3] ย [5]
'1'์ด ์ด๋ค ์์น์ ๋ค์ด๊ฐ์ง ํ๋จํจ
ย => '4', '6', '8'๊ณผ ๋น๊ตํ์ ๋ ๊ฐ์ฅ ์๊ธฐ ๋๋ฌธ์ ์ฒซ ๋ฒ์งธ ์์น์ ์ฝ์
[1] ย [4] ย [6] ย [8] ย [2] ย [7] ย [3] ย [5]
'2'๊ฐ ์ด๋ค ์์น์ ๋ค์ด๊ฐ์ง ํ๋จํจ
ย => '1'๊ณผ '4' ์ฌ์ด์ ์ฝ์
ํจ
[1] ย [2] ย [4] ย [6] ย [8] ย [7] ย [3] ย [5]
'7'์ด ์ด๋ค ์์น์ ๋ค์ด๊ฐ์ง ํ๋จํจ
ย => '6'๊ณผ '8' ์ฌ์ด์ ์ฝ์
ํจ
[1] ย [2] ย [4] ย [6] ย [7] ย [8] ย [3] ย [5]
'3'์ด ์ด๋ค ์์น์ ๋ค์ด๊ฐ์ง ํ๋จํจ
ย => '2'์ '4' ์ฌ์ด์ ์ฝ์
ํจ
[1] ย [2] ย [3] ย [4] ย [6] ย [7] ย [8] ย [5]
'5'๊ฐ ์ด๋ค ์์น์ ๋ค์ด๊ฐ์ง ํ๋จํจ
ย => '4'์ '6' ์ฌ์ด์ ์ฝ์
ํจ
[1] ย [2] ย [3] ย [4] ย [5] ย [6] ย [7] ย [8] ย
์ด์ ๊ฐ์ด ์ ์ ํ ์์น์ ์ฝ์
ํ๋ ๊ณผ์ ์ N - 1๋ฒ ๋ฐ๋ณตํ๊ฒ ๋๋ฉด ์ด์ ๊ฐ์ด ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋ ๊ฒ์ ํ์ธํ ์ ์์
์ ๋ ฌ์ด ์ด๋ฃจ์ด์ง ์์๋ ํญ์ ์ค๋ฆ์ฐจ์์ ์ ์งํ๊ณ ์์
(ํ๋์์ผ๋ก ์น ํด์ง ์นด๋๋ค์ ์ด๋ค ๋จ๊ณ๋ ์ง ํญ์ ์ ๋ ฌ๋ ์ํ์)
ย => ํน์ ํ ๋ฐ์ดํฐ์ ์ผ์ชฝ์ ์๋ ๋ฐ์ดํฐ๋ค์ ์ด๋ฏธ ์ ๋ ฌ์ด ๋ ์ํ์ด๋ฏ๋ก ์๊ธฐ๋ณด๋ค ์์ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ฌ๋ค๋ฉด ๋ ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ดํด๋ณผ ํ์ ์์ด ๊ทธ ์๋ฆฌ์ ์ฝ์
๋๋ฉด ๋๋ ๊ฒ!
์ฝ์
์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋ = O(Nยฒ), ์ ํ ์ ๋ ฌ๊ณผ ํก์ฌํ ์๊ฐ์ด ์์๋จ
But, ํ์ฌ ๋ฆฌ์คํธ์ ๋ฐ์ดํฐ๊ฐ ๊ฑฐ์ ์ ๋ ฌ๋์ด ์๋ ์ํ๋ผ๋ฉด ๋งค์ฐ ๋น ๋ฅด๊ฒ ๋์ํจ!
์ต์ ์ ๊ฒฝ์ฐ O(N)์ ์๊ฐ ๋ณต์ก๋
๊ฑฐ์ ์ ๋ ฌ๋์ด ์๋ ์ํ๋ก ์ ๋ ฅ์ด ์ฃผ์ด์ง๋ ๋ฌธ์ ๋ผ๋ฉด ์ฝ์ ์ ๋ ฌ์ ์ด์ฉํ๋ ๊ฒ์ด ์ ๋ต ํ๋ฅ ๋์ผ ์ ์์
๊ธฐ์ค ๋ฐ์ดํฐ๋ฅผ ์ค์ ํ๊ณ ๊ทธ ๊ธฐ์ค๋ณด๋ค ํฐ ๋ฐ์ดํฐ์ ์์ ๋ฐ์ดํฐ์ ์์น๋ฅผ ๋ฐ๊พธ๋ ๋ฐฉ๋ฒ
์ผ๋ฐ์ ์ธ ์ํฉ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ค ํ๋
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํต ์ ๋ ฌ์ ์ฒซ ๋ฒ์งธ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ค ๋ฐ์ดํฐ(Pivot)๋ก ์ค์ ํจ
# ํ์ด์ฌ์ ์ฅ์ ์ ์ด๋ฆฐ ํต ์ ๋ ฌ ์์ค์ฝ๋
array = [7, 5, 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))
[4] ย [6] ย [8] ย [1] ย [2] ย [7] ย [3] ย [5]
1. ํ์ฌ ํผ๋ฒ์ ๊ฐ์ '4', ์ผ์ชฝ์์๋ถํฐ '4'๋ณด๋ค ํฐ ๋ฐ์ดํฐ๋ฅผ ์ ํ = '6', ์ค๋ฅธ์ชฝ์์๋ถํฐ '4'๋ณด๋ค ์์ ๋ฐ์ดํฐ๋ฅผ ์ ํ = '3'
ย => ๋ ๋ฐ์ดํฐ์ ์์น๋ฅผ ์๋ก ๋ณ๊ฒฝ
[4] ย [3] ย [8] ย [1] ย [2] ย [7] ย [6] ย [5]
2. ํ์ฌ ํผ๋ฒ์ ๊ฐ์ '4', ์ผ์ชฝ์์๋ถํฐ '4'๋ณด๋ค ํฐ ๋ฐ์ดํฐ๋ฅผ ์ ํ = '8', ์ค๋ฅธ์ชฝ์์๋ถํฐ '4'๋ณด๋ค ์์ ๋ฐ์ดํฐ๋ฅผ ์ ํ = '2'
ย => ๋ ๋ฐ์ดํฐ์ ์์น๋ฅผ ์๋ก ๋ณ๊ฒฝ
[4] ย [3] ย [2] ย [1] ย [8] ย [7] ย [6] ย [5]
3. ํ์ฌ ํผ๋ฒ์ ๊ฐ์ '4', ์ผ์ชฝ์์๋ถํฐ '4'๋ณด๋ค ํฐ ๋ฐ์ดํฐ๋ฅผ ์ ํ = '8', ์ค๋ฅธ์ชฝ์์๋ถํฐ '4'๋ณด๋ค ์์ ๋ฐ์ดํฐ๋ฅผ ์ ํ = '1'
ย => ๋จ, ์ด์ฒ๋ผ ์์น๊ฐ ์๊ฐ๋ฆฌ๋ ๊ฒฝ์ฐ 'ํผ๋ฒ'๊ณผ '์์ ๋ฐ์ดํฐ'์ ์์น๋ฅผ ์๋ก ๋ณ๊ฒฝ
[1] ย [3] ย [2] ย [4] ย [8] ย [7] ย [6] ย [5]
[๋ถํ ์๋ฃ] '4'์ ์ผ์ชฝ์ ์๋ ๋ฐ์ดํฐ๋ ๋ชจ๋ 4๋ณด๋ค ์๊ณ , ์ค๋ฅธ์ชฝ์ ์๋ ๋ฐ์ดํฐ๋ ๋ชจ๋ 4๋ณด๋ค ํผ
์ด์ ๊ฐ์ด ํผ๋ฒ์ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ ๋ฌถ์์ ๋๋๋ ์์
์ ๋ถํ (Divide) ํน์ ํํฐ์
(Partition)์ด๋ผ ํจ
[1] ย [3] ย [2] ย [ย ] ย [ย ] ย [ย ] ย [ย ] ย [ย ] ย
[์ผ์ชฝ ๋ฐ์ดํฐ ๋ฌถ์ ์ ๋ ฌ] ์ผ์ชฝ์ ์๋ ๋ฐ์ดํฐ์ ๋ํด์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ๋ ฌ ์ํ
[ย ] ย [ย ] ย [ย ] ย [ย ] ย [8] ย [7] ย [6] ย [5]
[์ค๋ฅธ์ชฝ ๋ฐ์ดํฐ ๋ฌถ์ ์ ๋ ฌ] ์ค๋ฅธ์ชฝ์ ์๋ ๋ฐ์ดํฐ์ ๋ํด์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ๋ ฌ ์ํ
์ด๋ฌํ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด ์ ์ฒด ๋ฐ์ดํฐ์ ๋ํด์ ์ ๋ ฌ์ด ์ํ๋จ
(๋ถ๋ถ ๋ฆฌ์คํธ๋ค์ด ๋ ์ด์ ๋ถํ ์ด ๋ถ๊ฐ๋ฅํ ๋๊น์ง ๋ฐ๋ณตํจ)
ํต ์ ๋ ฌ์ ํ๊ท ์๊ฐ ๋ณต์ก๋ = O(NlogN)
ํ๊ท ์ ์ผ๋ก ์๊ฐ ๋ณต์ก๋๊ฐ O(NlogN)์ด์ง๋ง ์ต์
์ ๊ฒฝ์ฐ O(Nยฒ)
๋ฐ์ดํฐ๊ฐ ๋ฌด์์๋ก ์
๋ ฅ๋๋ ๊ฒฝ์ฐ ํต ์ ๋ ฌ์ ๋น ๋ฅด๊ฒ ๋์ํ ํ๋ฅ ์ด ๋์
์ด๋ฏธ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋์ด ์๋ ๊ฒฝ์ฐ์๋ ๋งค์ฐ ๋๋ฆฌ๊ฒ ๋์ํจ
๊ธฐ๋ณธ ์ ๋ ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ๋ฉด ์ต์ ์ ๊ฒฝ์ฐ์๋ ์๊ฐ ๋ณต์ก๋๊ฐ O(NlogN)์ด ๋๋ ๊ฒ์ ๋ณด์ฅํด์ฃผ๊ธฐ์ ๊ฑฑ์ X
๊ณ์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ํน์ ํ ์กฐ๊ฑด์ด ๋ถํฉํ ๋๋ง ์ฌ์ฉํ ์ ์์ง๋ง ๋งค์ฐ ๋น ๋ฅธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
'๋ฐ์ดํฐ์ ํฌ๊ธฐ ๋ฒ์๊ฐ ์ ํ๋์ด ์ ์ ํํ๋ก ํํํ ์ ์์ ๋'๋ง ์ฌ์ฉ ๊ฐ๋ฅ
# ๊ณ์ ์ ๋ ฌ ์์ค์ฝ๋
# ๋ชจ๋ ์์์ ๊ฐ์ด 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=' ') # ๋์ด์ฐ๊ธฐ๋ฅผ ๊ตฌ๋ถ์ผ๋ก ๋ฑ์ฅํ ํ์๋งํผ ์ธ๋ฑ์ค ์ถ๋ ฅ
[4] ย [6] ย [4] ย [8] ย [1] ย [2] ย [7] ย [1]
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
์ด๊ธฐ์ํ, ๊ฐ์ฅ ํฐ ๋ฐ์ดํฐ๋ '8', ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ๋ '1'
๊ฐ์ฅ ํฐ ๋ฐ์ดํฐ์ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ์ ๋ฒ์๊ฐ ๋ชจ๋ ๋ด๊ธธ ์ ์๋๋ก ํ๋์ ๋ฆฌ์คํธ๋ฅผ ์์ฑ
๋ฆฌ์คํธ์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ 0์ด ๋๋๋ก ์ด๊ธฐํํจ
๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ํ์ธํ๋ฉฐ ๋ฐ์ดํฐ์ ๊ฐ๊ณผ ๋์ผํ ์ธ๋ฑ์ค์ ๋ฐ์ดํฐ๋ฅผ 1์ฉ ์ฆ๊ฐ์ํค๋ฉด ๋จ
[4] ย [6] ย [4] ย [8] ย [1] ย [2] ย [7] ย [1]
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
[4] ย [6] ย [4] ย [8] ย [1] ย [2] ย [7] ย [1]
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
[4] ย [6] ย [4] ย [8] ย [1] ย [2] ย [7] ย [1]
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 2 | 0 | 1 | 0 | 0 |
...
[4] ย [6] ย [4] ย [8] ย [1] ย [2] ย [7] ย [1]
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|
2 | 1 | 0 | 2 | 0 | 1 | 1 | 1 |
๊ฒฐ๊ณผ์ ์ผ๋ก ์ ๋ฆฌ์คํธ์๋ ๊ฐ ๋ฐ์ดํฐ๊ฐ ๋ช ๋ฒ ๋ฑ์ฅํ๋์ง ๊ทธ ํ์๊ฐ ๊ธฐ๋ก๋จ
์ ๋ ฌ๋ ๊ฒฐ๊ณผ๋ฅผ ์ง์ ๋์ผ๋ก ํ์ธํ๊ณ ์ถ๋ค๋ฉด, ๋ฆฌ์คํธ์ ์ฒซ ๋ฒ์งธ ๋ฐ์ดํฐ๋ถํฐ ํ๋์ฉ ๊ทธ ๊ฐ๋งํผ ์ธ๋ฑ์ค๋ฅผ ์ถ๋ ฅํ๋ฉด ๋จ
ex) ์ถ๋ ฅ ๊ฒฐ๊ณผ: 1 1 2 4 4 6 7 8
๋ฐ์ดํฐ์ ๊ฐ์๊ฐ N, ๋ฐ์ดํฐ(์์) ์ค ์ต๋๊ฐ์ด K์ผ ๋ ์ต์
์ ๊ฒฝ์ฐ์๋ ์ํ ์๊ฐ O(N + K) ๋ฅผ ๋ณด์ฅํจ
์๊ฐ ๋ณต์ก๋์ ๊ณต๊ฐ ๋ณต์ก๋ ๋ชจ๋ O(N + K)
๋์ผํ ๊ฐ์ ๊ฐ์ง๋ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ ๊ฐ ๋ฑ์ฅํ ๋ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์
๊ธฐ๋ณธ ์ ๋ ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ sorted()
ํจ์๋ฅผ ์ ๊ณตํจ
ํต ์ ๋ ฌ๊ณผ ๋์ ๋ฐฉ์์ด ๋น์ทํ ๋ณํฉ ์ ๋ ฌ์ ๊ธฐ๋ฐ์ผ๋ก ํจ, ์ต์
์ ๊ฒฝ์ฐ์๋ ์๊ฐ ๋ณต์ก๋ O(NlogN)์ ๋ณด์ฅํจ
๋ฆฌ์คํธ ๋ณ์๊ฐ ํ๋ ์์ ๋ ๋ด๋ถ ์์๋ฅผ ๋ฐ๋ก ์ ๋ ฌํ ์๋ ์์
๋ฆฌ์คํธ ๊ฐ์ฒด์ ๋ด์ฅ ํจ์์ธ sort()
๋ฅผ ์ด์ฉํ๋ ๊ฒ
sorted()
๋ sort()
๋ฅผ ์ด์ฉํ ๋์ key ๋งค๊ฐ๋ณ์๋ฅผ ์
๋ ฅ์ผ๋ก ๋ฐ์ ์ ์์
key ๊ฐ์ผ๋ก๋ ํ๋์ ํจ์๊ฐ ๋ค์ด๊ฐ์ผ ํ๋ฉฐ ์ด๋ ์ ๋ ฌ ๊ธฐ์ค์ด ๋จ
์ฝ๋ฉ ํ
์คํธ์์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ, ์ผ๋ฐ์ ์ผ๋ก 3๊ฐ์ง ๋ฌธ์ ์ ํ์ผ๋ก ๋ํ๋ผ ์ ์์
ย 1. ์ ๋ ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ํ ์ ์๋ ๋ฌธ์ : ๋จ์ํ ์ ๋ ฌ ๊ธฐ๋ฒ์ ์๊ณ ์๋์ง ๋ฌผ์ด๋ณด๋ ๋ฌธ์ ๋ก ๊ธฐ๋ณธ ์ ๋ ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์์งํ๊ณ ์์ผ๋ฉด ์ด๋ ต์ง ์๊ฒ ํ ์ ์์
ย 2. ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์๋ฆฌ์ ๋ํด์ ๋ฌผ์ด๋ณด๋ ๋ฌธ์ : ์ ํ ์ ๋ ฌ, ์ฝ์
์ ๋ ฌ, ํต ์ ๋ ฌ ๋ฑ์ ์๋ฆฌ๋ฅผ ์๊ณ ์์ด์ผ ๋ฌธ์ ๋ฅผ ํ ์ ์์
ย 3. ๋ ๋น ๋ฅธ ์ ๋ ฌ์ด ํ์ํ ๋ฌธ์ : ํต ์ ๋ ฌ ๊ธฐ๋ฐ์ ์ ๋ ฌ ๊ธฐ๋ฒ์ผ๋ก๋ ํ ์ ์์ผ๋ฉฐ ๊ณ์ ์ ๋ ฌ ๋ฑ์ ๋ค๋ฅธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ๊ฑฐ๋ ๋ฌธ์ ์์ ๊ธฐ์กด์ ์๋ ค์ง ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌ์กฐ์ ์ธ ๊ฐ์ ์ ๊ฑฐ์ณ์ผ ํ ์ ์์
ํ๋์ ์์ด์๋ ๋ค์ํ ์๊ฐ ์กด์ฌํจ, ์ด๋ฌํ ์๋ ํฌ๊ธฐ์ ์๊ด์์ด ๋์ด๋์ด ์์
์ด ์๋ฅผ ํฐ ์๋ถํฐ ์์ ์์ ์์๋ก ์ ๋ ฌํด์ผ ํจ
์์ด์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋์์ค
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ ๋ ฌ์ ํ ์ ์๋์ง ๋ฌผ์ด๋ณด๋ ๋ฌธ์
์์ ๊ฐ์๊ฐ 500๊ฐ ์ดํ๋ก ๋งค์ฐ ์ ์ผ๋ฉฐ, ๋ชจ๋ ์๋ 1 ์ด์ 100,000 ์ดํ์ด๋ฏ๋ก ์ด๋ ํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์
๊ฐ์ฅ ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๋ ํ์ด์ฌ์ ๊ธฐ๋ณธ ์ ๋ ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด ํจ๊ณผ์
N๋ช ์ ํ์ ์ ๋ณด๊ฐ ์์, ํ์ ์ ๋ณด๋ ํ์์ ์ด๋ฆ๊ณผ ํ์์ ์ฑ์ ์ผ๋ก ๊ตฌ๋ถ๋จ
๊ฐ ํ์์ ์ด๋ฆ๊ณผ ์ฑ์ ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋ ์ฑ์ ์ด ๋ฎ์ ์์๋๋ก ํ์์ ์ด๋ฆ์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค
ํ์์ ์ ๋ณด๊ฐ ์ต๋ 100,000๊ฐ๊น์ง ์ ๋ ฅ๋ ์ ์์ผ๋ฏ๋ก ์ต์ ์ ๊ฒฝ์ฐ O(NlogN)์ ๋ณด์ฅํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ๊ฑฐ๋ O(N)์ ๋ณด์ฅํ๋ ๊ณ์ ์ ๋ ฌ์ ์ด์ฉํ๋ฉด ๋จ
์ ๋ ฅ๋๋ ๋ฐ์ดํฐ๋ ํ์์ ์ด๋ฆ๊ณผ ์ ์์ง๋ง, ์ถ๋ ฅํ ๋๋ ํ์์ ์ด๋ฆ๋ง ์ถ๋ ฅํ๋ฉด ๋๋ฏ๋ก ํ์ ์ ๋ณด๋ฅผ (์ ์, ์ด๋ฆ)์ผ๋ก ๋ฌถ์ ๋ค ์ ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ์ ์ํํด์ผ ํจ
๋ฐ๋ผ์ ์ด๋ฐ ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง๋ก ํ์ด์ฌ์ ๊ธฐ๋ณธ ์ ๋ ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ๊ณผ์
์๋น์ด๋ ๋ ๊ฐ์ ๋ฐฐ์ด A์ B๋ฅผ ๊ฐ์ง๊ณ ์์
๋ ๋ฐฐ์ด์ N๊ฐ์ ์์๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, ๋ฐฐ์ด์ ์์๋ ๋ชจ๋ ์์ฐ์์
์๋น์ด๋ ์ต๋ K๋ฒ์ ๋ฐ๊ฟ์น๊ธฐ ์ฐ์ฐ์ ์ํํ ์ ์๋๋ฐ, ๋ฐ๊ฟ์น๊ธฐ ์ฐ์ฐ์ด๋ ๋ฐฐ์ด A์ ์๋ ์์ ํ๋์ ๋ฐฐ์ด B์ ์๋ ์์ ํ๋๋ฅผ ๊ณจ๋ผ ๋ ์์๋ฅผ ์๋ก ๋ฐ๊พธ๋ ๊ฒ์ ๋งํจ
์๋น์ด์ ์ต์ข
๋ชฉํ๋ ๋ฐฐ์ด A์ ๋ชจ๋ ์์์ ํฉ์ด ์ต๋๊ฐ ๋๋๋ก ํ๋ ๊ฒ์ด๋ฉฐ, ์ฐ๋ฆฌ๋ ์๋น์ด๋ฅผ ๋์์ผ ํจ
N, K, ๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ด A์ B์ ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋, ์ต๋ K๋ฒ์ ๋ฐ๊ฟ์น๊ธฐ ์ฐ์ฐ์ ์ํํ์ฌ ๋ง๋ค ์ ์๋ ๋ฐฐ์ด A์ ๋ชจ๋ ์์์ ํฉ์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค
๋ฌธ์ ํด๊ฒฐ์ ์ํ ๊ธฐ๋ณธ ์์ด๋์ด๋ ๋งค๋ฒ ๋ฐฐ์ด A์์ ๊ฐ์ฅ ์์ ์์๋ฅผ ๊ณจ๋ผ, ๋ฐฐ์ด B์์ ๊ฐ์ฅ ํฐ ์์์ ๊ต์ฒดํ๋ ๊ฒ
๋จ, ๋ฐฐ์ด A์์ ๊ฐ์ฅ ์์ ์์๊ฐ ๋ฐฐ์ด B์์ ๊ฐ์ฅ ํฐ ์์๋ณด๋ค ์์ ๋์๋ง ๊ต์ฒด๋ฅผ ์ํํด์ผ ํจ
์ด๋ฌํ ๊ณผ์ ์ K๋ฒ ๋ฐ๋ณตํ๋ฉด ์ํ๋ ์ ๋ต์ ์ป์ ์ ์์
๋ฐฐ์ด A์ ์์๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก, ๋ฐฐ์ด B์ ์์๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํจ
๋ ๋ฐฐ์ด์ ์์๋ฅผ ๊ฐ์ฅ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค๋ถํฐ ์ฐจ๋ก๋๋ก ๋น๊ตํ๋ฉฐ A์ ์์๊ฐ B์ ์์๋ณด๋ค ์์ ๋์๋ง ๊ต์ฒด๋ฅผ ์ํํจ
๋ ๋ฐฐ์ด์ ์์๊ฐ ์ต๋ 100,000๊ฐ๊น์ง ์ ๋ ฅ๋ ์ ์์ผ๋ฏ๋ก O(NlogN)์ ๋ณด์ฅํ๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ด์ฉ
๐ ์ด๊ฒ์ด ์ฝ๋ฉ ํ ์คํธ๋ค ๊ต์ฌ๋ฅผ ํตํด ํ์ตํ ๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค.