โก๏ธ ์ ํ์ ๋ ฌ
๋ฐ์ดํฐ๊ฐ ๋ฌด์์๋ก ์์ ๋, ์ด์ค ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ๋ฅผ ๋งจ ์์ ์๋ ๋ฐ์ดํฐ์ ๋ฐ๊พธ๊ณ , ๊ทธ๋ค์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ํํด ์์์ ๋๋ฒ์งธ ๋ฐ์ดํฐ์ ๋ฐ๊พธ๊ณ ... (๋ฐ๋ณต)
#์ ํ์ ๋ ฌ
arr = list(map(int, input().split()))
for i in range(len(arr)):
min_index = i
for j in range(i + 1, len(arr)):
if arr[j] < arr[min_index] :
min_index = j
arr[i], arr[min_index] = arr[min_index], arr[i] #swap
print(arr)
โฐ์ ํ์ ๋ ฌ์ ์๊ฐ๋ณต์ก๋ = O(n^2)
โก๏ธ ์ฝ์ ์ ๋ ฌ
2๋ฒ์งธ ์์๋ถํฐ ์ ๋ ฌ์์. ์์ ์ ์ ์ธ๋ฑ์ค ์ซ์์ ์๊ธฐ ์์ ๋ณด๋ค ์์ ์๊ฐ ์์ผ๋ฉด ๊ทธ ๋ค์ ์ฝ์ . 2 ~ n ๊น์ง ๋ฐ๋ณต
#์ฝ์
์ ๋ ฌ
arr = list(map(int, input().split()))
for i in range(2, len(arr)):
for j in range(i, 0, -1):
if arr[j] < arr[j - 1] :
arr[j], arr[j - 1] = arr[j - 1], arr[j] #swap
else :
break
print(arr)
โฐ์ฝ์ ์ ๋ ฌ์ ์๊ฐ๋ณต์ก๋ = O(n^2)
์ฝ์ ์ ๋ ฌ์ ์ต์ ์ ๊ฒฝ์ฐ O(n)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง. ์ฝ์ ์ ๋ ฌ์ ๊ฑฐ์ ์ ๋ ฌ๋์ด ์๋ ์ํ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ ๋ ๋งค์ฐ ๋น ๋ฅด๋ค. (์ด๊ฒฝ์ฐ, ํต ์ ๋ ฌ๋ณด๋ค๋ ๋น ๋ฆ)
โก๏ธ ํต์ ๋ ฌ
: ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ์
๊ธฐ์ค ๋ฐ์ดํฐ๋ฅผ ์ค์ ํ ํ ๊ธฐ์ค๋ณด๋ค ํฐ ๋ฐ์ดํฐ์ ์์ ๋ฐ์ดํฐ์ ์์น๋ฅผ ๋ณ๊ฒฝํจ.
๊ธฐ์ค ๋ฐ์ดํฐ๋ฅผ pivot์ด๋ผ๊ณ ํจ.
๐ ๋์๊ณผ์
1๏ธโฃ ๋ฆฌ์คํธ์ ์ฒซ๋ฒ์งธ ๋ฐ์ดํฐ๊ฐ ํผ๋ฒ์ด ๋จ.
5 7 1 4 9 2 4 6 9 3
2๏ธโฃ ํผ๋ฒ ์ค์ ํ ์ผ์ชฝ์์๋ถํฐ ํผ๋ฒ๋ณด๋ค ํฐ ๋ฐ์ดํฐ๋ฅผ, ์ค๋ฅธ์ชฝ์์๋ถํฐ ํผ๋ฒ๋ณด๋ค ์์ ์๋ฅผ ํ์ํจ
5 7(์ผ์ชฝ) 1 4 9 2 4 6 9 3 (์ค๋ฅธ์ชฝ)
3๏ธโฃ ๋ ๋ฐ์ดํฐ ์์น๋ฅผ ๋ณ๊ฒฝ
5 3 1 4 9 2 4 6 9 7
์์ ๊ณผ์ 1,2,3์ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ์ด ๊ต์ฐจํ์ง ์์๋์ ๋ฐ๋ณตํจ
1๏ธโฃ 5 3 1 4 9 2 4 6 9 7
2๏ธโฃ 5 3 1 4 9 2 4 6 9 7
3๏ธโฃ 5 3 1 4 4 2 9 6 9 7
1๏ธโฃ 5 3 1 4 4 2 9 6 9 7
2๏ธโฃ 5 3 1 4 4 2 9 6 9 7
-->โ๏ธ์ผ์ชฝ์์๋ถํฐ ์ฐพ์ ๋ฐ์ดํฐ์ ์ค๋ฅธ์ชฝ์์๋ถํฐ ์ฐพ์ ๋ฐ์ดํฐ๊ฐ ์๋ก ์๊ฐ๋ฆผ
์ค๋ฅธ์ชฝ์์๋ถํฐ ์ฐพ์ ํผ๋ฒ๋ณด๋ค ์์ ๋ฐ์ดํฐ์ ํผ๋ฒ์ ์์น๋ฅผ ์๋ก ๋ฐ๊ฟ์ค
2 3 1 4 4 5 9 6 9 7
ํผ๋ฒ์ ์ผ์ชฝ์๋ ํผ๋ฒ๋ณด๋ค ์์ ์๋ง, ์ค๋ฅธ์ชฝ์๋ ํฐ ์๋ง์ด ์์นํ๊ฒ ๋จ. ํผ๋ฒ์ด์๋ 5๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ๋ฆฌ์คํธ๋ฅผ ๋ค์ ๊ณผ์ 1, 2, 3์ ํตํด ์ ๋ ฌํจ.
1๏ธโฃ 2 3 1 4 4 | 5 | 1๏ธโฃ 9 6 9 7
2๏ธโฃ 2 3 1 4 4 | 5 | 2๏ธโฃ 9 6 9 7
3๏ธโฃ 2 1 3 4 4 | 5 | 3๏ธโฃ 9 6 7 9
1๏ธโฃ 2 1 3 4 4 | 5 | 1๏ธโฃ 9 6 7 9
2๏ธโฃ 2 1 3 4 4 | 5 | 2๏ธโฃ 9 6 7 9 ํฐ์์์(๊ต์ฐจ๋๊ฑฐ๋ ๋๊ฐ์ด ํ๋ฉด๋จ)
โ๏ธ 1 2 3 4 4 | 5 | โ๏ธ 7 6 9 9
1๏ธโฃ 1 | 2 | 1๏ธโฃ 3 4 4 | 5 | 1๏ธโฃ 7 6 | 9 | 1๏ธโฃ 9
#ํผ๋ฒ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ, ์ค๋ฅธ์ชฝ์ผ๋ก ๋๋ ํ ๋ค์ ํต์ํธ๋ฅผ ํ ๋ ๋ฐ์ดํฐ๊ฐ ํ๋๋ฐ์ ์์ผ๋ฉด ๊ทธ๋ฅ ๋ฆฌํด
1 | 2 | 1๏ธโฃ 3 4 4 | 5 | 1๏ธโฃ 7 6 | 9 | 9
1 | 2 | 2๏ธโฃ 3 4 4 | 5 | 2๏ธโฃ 7 6 | 9 | 9
1 | 2 | โ๏ธ 3 4 4 (ํผ๋ฒ๊ณผ ์์์๊ฐ ๊ฐ์ ์ธ๋ฑ์ค์ ์๋ ์ํ) | 5 | โ๏ธ 6 7 | 9 | 9
1 | 2 | 3 | 1๏ธโฃ 4 4 | 5 | 6 | 7 | 9 | 9 (๋ฐ์ดํฐ๊ฐ ํ๋ ๋จ์ ๊ฑด ์ ๋ ฌ๋ ๊ฒ์ผ๋ก ๋ณผ ์ ์์ผ๋ฏ๋ก ๋ฆฌํด~)
1 | 2 | 3 | 2๏ธโฃ 4 4 | 5 | 6 | 7 | 9 | 9
1 | 2 | 3 | โ๏ธ 4 4 (ํผ๋ฒ๊ณผ ์์์๊ฐ ๊ฐ์ ์ธ๋ฑ์ค์ ์๋ ์ํ) | 5 | 6 | 7 | 9 | 9
1 | 2 | 3 | 4 | 4 | 5 | 6 | 7 | 9 | 9
์์์ใ ์ ์ ๋ ฌ ๋!!๐ปใ ใ ใ
โฐํต์ ๋ ฌ์ ํ๊ท ์๊ฐ๋ณต์ก๋ = O(nlogn)
โฐํต์ ๋ ฌ ์ต์ ์ ๊ฒฝ์ฐ์ผ ๋, ์๊ฐ๋ณต์ก๋ = O(n^2)
โ๏ธ ํต์ ๋ ฌ์ด ์ต์ ์ ๊ฒฝ์ฐ์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง ๋๋, ๋ฐ์ดํฐ๊ฐ ์ ๋ถ ์ ๋ ฌ๋์ด ์์ ๋์.
โ๏ธ ๋ฐ์ดํฐ๊ฐ ๊ฑฐ์ ์ ๋ ฌ๋์ด ์๋ ์ํ๋ผ๋ฉด ์ฝ์ ์ ๋ ฌ์ด ๋น ๋ฅด๊ฒ ๋์ํจ. ์ ํ ์ ๋ ฌ๋์ด ์์ง ์๋ค๋ฉด ํต์ ๋ ฌ์ ์ฌ์ฉ.
โ๏ธ ํ์ด์ฌ์ ๊ธฐ๋ณธ ์ ๋ ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, nlogn์ ์๊ฐ๋ณต์ก๋๋ฅผ ๋ณด์ฅํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ธ์ ๋ ์ฌ์ฉํด๋๋จใ ใ
#ํต์ ๋ ฌ
arr = list(map(int, input().split()))
def quick_sort(arr, start, end):
if start >= end:
return
pivot = start #1๏ธโฃ
left = start + 1
right = end
while left <= right:
#2๏ธโฃ
while left <= end and arr[left] <= arr[pivot]:
left += 1
while right > start and arr[right] >= arr[pivot]:
right -= 1
if left > right: #โ๏ธ
arr[right], arr[pivot] = arr[pivot], arr[right]
else: #3๏ธโฃ
arr[left], arr[right] = arr[right], arr[left]
quick_sort(arr, start, right - 1)
quick_sort(arr, right + 1, end)
quick_sort(arr, 0, len(arr) - 1)
print(arr)
โก๏ธ ๊ณ์์ ๋ ฌ
: ํน์ ํ ์กฐ๊ฑด์ด ์์ ๋๋ง ์ฌ์ฉํ ์ ์๋ค. ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์์ ์ ์์ฌ์ผํจ. ๋ฐ์ดํฐ์ ๋ฒ์๊ฐ ๋๋ฌด ํฌ๋ฉด ์๋จ(์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฅ ํฐ ๋ฐ์ดํฐ์ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ์ ์ฐจ์ด๊ฐ 1,000,000์ ๋์ง ์์ ๋ ํจ๊ณผ์ )
โฐ ๊ณ์์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋๋ ๋ฐ์ดํฐ์ ๊ฐ์๊ฐ n, ๋ฐ์ดํฐ์ ์ต๋๊ฐ์ด k์ผ ๋, O(n + k)๋ฅผ ๋ณด์ฅ
๊ณ์์ ๋ ฌ ๋์ ๋ฐฉ๋ฒ : ๋ชจ๋ ๋ฒ์๋ฅผ ๋ด์ ์ ์๋ ํฌ๊ธฐ์ ๋ฆฌ์คํธ๋ฅผ ์ ์ธํจ. ๋ฆฌ์คํธ์ ์ธ๋ฑ์ค๊ฐ ๋ฐ์ดํฐ๊ฐ์ด ๋๊ณ ๋ฆฌ์คํธ ์์ ๊ฐ์ด ๋ฐ์ดํฐ์ ๊ฐ์๊ฐ ๋จ.
ex) ์ต๋๊ฐ์ด 5๋ผ๊ณ ๊ฐ์ (์ต๋๊ฐ์ด K์ผ ๋ K + 1์นธ์ ๋ฐฐ์ด ์ ์ธํ๊ธฐ)
๋ฐ์ดํฐ : 5 5 3 2 4 4 0 0
arr[0] = 2
arr[1] = 0
arr[2] = 1
arr[3] = 1
arr[4] = 2
arr[5] = 2
#๊ณ์์ ๋ ฌ
data = list(map(int, input().split()))
arr = [0] * (max(data) + 1)
for i in range(len(data)):
arr[data[i]] += 1
for i in range(len(arr)):
for j in range(arr[i]):
print(i, end = ' ')
โฐ ๊ณ์์ ๋ ฌ์ ๊ณต๊ฐ๋ณต์ก๋ = O(n + k)
โก๏ธ ํ์ด์ฌ์ ์ ๋ ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
1. sorted() : ์ ๋ ฌ๋ ๋ฆฌ์คํธ๋ฅผ ๋ฐํํด์ค. ์งํฉ์ด๋ ๋์ ๋๋ฆฌ ์๋ฃํ์ ์ ๋ ฅ ๋ฐ์๋ ๋ฐํ์ ๋ฆฌ์คํธ๋ก ํด์ค. ํญ์ nlogn์ ์๊ฐ๋ณต์ก๋๋ฅผ ๋ณด์ฅ.
2. sort() : ๋ฆฌ์คํธ ๊ฐ์ฒด์ ๋ด์ฅํจ์์. ๋ณ๋์ ๋ฆฌ์คํธ๊ฐ ๋ฐํ๋๋ ๊ฒ์ด ์๋๋ผ ์ ๋ ฅ๋ฐ์ ๋ฆฌ์คํธ ๋ด๋ถ๋ฅผ ๋ฐ๋ก ์ ๋ ฌ์ํด.
'๐ฅด์๊ณ ๋ฆฌ์ฆ > ์๊ณ ๋ฆฌ์ฆ ์ด๋ก ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ ์ด๋ก ] ์ ๋ ฌ(์ ํ์ ๋ ฌ, ์ฝ์ ์ ๋ ฌ, ํต์ ๋ ฌ, ๊ณ์์ ๋ ฌ) (2) (0) | 2022.02.28 |
---|---|
[์๊ณ ๋ฆฌ์ฆ ์ด๋ก ] DFS, BFS (2) (0) | 2022.02.26 |
[์๊ณ ๋ฆฌ์ฆ ์ด๋ก ] DFS, BFS (1) (0) | 2022.02.24 |
[์๊ณ ๋ฆฌ์ฆ ์ด๋ก ] ๊ตฌํ ๋ฌธ์ (0) | 2022.02.24 |
[์๊ณ ๋ฆฌ์ฆ ์ด๋ก ] ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ Greedy!!! (0) | 2022.02.22 |