DOing
[์๊ณ ๋ฆฌ์ฆ] ์ ๋ ฌ with Python ๋ณธ๋ฌธ
๐ก ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
์ ๋ ฌ์ด๋, ๋ฐ์ดํฐ๋ฅผ ํน์ ํ ๊ธฐ์ค์ ๋ฐ๋ผ์ ์์๋๋ก ๋์ดํ๋ ๊ฒ์ ๋งํ๋ค.
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๊ต์ฅํ ๋ค์ํ๋ฐ ์ด๋ฒ ํฌ์คํ ์์๋ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ์ ํ ์ ๋ ฌ, ์ฝ์ ์ ๋ ฌ, ํต ์ ๋ ฌ, ๊ณ์ ์ ๋ ฌ์ ๋ค๋ค๋ณด๋ ค๊ณ ํ๋ค. ์ ๋ ฌ ์ํ์์๋ ์ํฉ์ ๋ง๋ ์๊ณ ๋ฆฌ์ฆ์ ์ ํํด์ผ ํจ์จ์ ์ผ๋ก ์๋ํ ์ ์๋ค.
์ ํ ์ ๋ ฌ | ์ฝ์ ์ ๋ ฌ | ํต ์ ๋ ฌ | ๊ณ์ ์ ๋ ฌ | |
์๊ฐ ๋ณต์ก๋ | O(N^2) | O(N^2) | O(NlogN) | O(N+K) |
๊ณต๊ฐ ๋ณต์ก๋ | O(N) | O(N) | O(N) | O(N+K) |
์ถ์ฒ ์ํฉ | ๊ฐ๋จ | ๊ฑฐ์ ์ ๋ ฌ๋์ด ์๋ ๊ฒฝ์ฐ | ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ | ๋ฐ์ดํฐ ํฌ๊ธฐ ๋ฒ์๊ฐ ์์ ๊ฒฝ์ฐ |
(N : ๋ฐ์ดํฐ์ ๊ฐฏ์, K : ๋ฐ์ดํฐ ์ต๋๊ฐ์ ํฌ๊ธฐ)
* ํ ํฌ์คํ ์์๋ ์ค๋ฆ์ฐจ์๋ง ๋ค๋ฃจ๊ณ ์๋ค. ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ ์๊ณ ๋ฆฌ์ฆ์์ ํฌ๊ธฐ ๋น๊ต๋ฅผ ๋ฐ๋๋ก ์ํํ๊ฑฐ๋ ๋ฆฌ์คํธ์ ์์๋ฅผ ๋ค์ง์ด์ ์ฌ์ฉํ๋ฉด ๋๋ค. ๋ฆฌ์คํธ๋ฅผ ๋ค์ง๋ ์ฐ์ฐ์ O(N)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
๐ก ์ ํ ์ ๋ ฌ
ํ์ฌ ์ ๋ ฌ๋์ง ์์ ๋ฐ์ดํฐ ์ค์์ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ํํ๋ค.
์๊ฐ๋ณต์ก๋๋ O(N^2)์ผ๋ก ๋นํจ์จ์ ์ด๋ง, ์ฝ๋ ๊ตฌํ์ด ์ฝ๋ค.
[์ฝ๋]
๊ฐ์ฅ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์์ ์์ผ๋ก ๋ณด๋ด๋ ๊ณผ์ ์ N-1๋ฒ ๋ฐ๋ณตํ๋ฉด๋๋ค.
array = [6,3,2,1,4,5]
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)
๐ก ์ฝ์ ์ ๋ ฌ
์ด๋ฏธ ์ ๋ ฌ๋์ด์๋ ๋ฐ์ดํฐ์ ๋น๊ตํ์ฌ, ์์ ์ ์์น๋ฅผ ์ฐพ์ ์ฝ์ ํ๋ค.
์๊ฐ๋ณต์ก๋๋ O(N^2)์ด์ง๋ง ๋ฐ์ดํฐ๊ฐ ๊ฑฐ์ ์ ๋ ฌ๋์ด์๋ค๋ฉด ํต ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ๋ณด๋ค๋ ๋น ๋ฅด๋ค. ์ต์ ์ ๊ฒฝ์ฐO(N)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
์ฐธ๊ณ ๋ก ์ฝ์ ์ ๋ ฌ์ ๋๋ฒ์งธ ๋ฐ์ดํฐ๋ถํฐ ์์๋๋ค.
์๋ํ๋ฉด ์ฒซ๋ฒ์งธ ๋ฐ์ดํฐ๋ ๊ทธ์์ฒด๋ก ์ ๋ ฌ๋์ด์๋ค๊ณ ํ๋จํ๊ธฐ ๋๋ฌธ์ด๋ค.
[์ฝ๋]
array = [6,3,2,1,4,5]
for i in range(len(array)):
# ์ด๋ฏธ ์ ๋ ฌ๋ ๋ฐ์ดํฐ๋ค๊ณผ ๋น๊ต
# ์ธ๋ฑ์ค i๋ถํฐ 1๊น์ง ๊ฐ์ํ๋ฉฐ ๋ฐ๋ณต
for j in range(i, 0, -1):
# ์ ๋ ฌ๋ ๋ฐ์ดํฐ๋ณด๋ค ์๋ค๋ฉด ์ค์ํ
if array[j] < array[j-1]:
array[j], array[j-1] = array[j-1], array[j]
else:
break # ์ ๋ ฌ๋ ๋ฐ์ดํฐ๋ณด๋ค ํฌ๋ค๋ฉด ๋ฉ์ถค
print(array)
๐ก ํต ์ ๋ ฌ
ํต ์ ๋ ฌ์ ์ง๊ธ๊น์ง ๋ฐฐ์ด ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ค์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ ๋ ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ทผ๊ฐ์ด ๋๋ ์๊ณ ๋ฆฌ์ฆ์ด๊ธฐ๋ ํ๋ค.
ํต์ ๋ ฌ์ ๊ธฐ์ค(pivot)์ ์ค์ ํ ๋ค์ ํฐ ์์ ์์ ์๋ฅผ ๊ตํํ ํ ๋ฆฌ์คํธ๋ฅผ ๋ฐ์ผ๋ก ๋๋๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
ํฐ ์ซ์์ ์์ ์ซ์๋ฅผ ๊ตํํ ๋, ๊ตํํ๊ธฐ ์ํ '๊ธฐ์ค'์ ๋ฐ๋ก pivot์ด๋ผ๊ณ ํํํ๋ค. ํต ์ ๋ ฌ์ ์ํํ๊ธฐ ์ ์๋ pivot์ ์ด๋ป๊ฒ ์ค์ ํ ๊ฒ์ธ์ง๋ฅผ ๋ฏธ๋ฆฌ ๋ช ์ํด์ผํ๋ค. ํผ๋ฒ์ ์ค์ ํ๊ณ ๋ถํ ํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ์ ์ฌ๋ฌ ๋ฐฉ์์ผ๋ก ํต์ ๋ ฌ์ ๊ตฌ๋ถํ๋๋ฐ, ํ์ฌ ํฌ์คํ ์์๋ ๊ฐ์ฅ ๋ํ์ ์ธ ๋ถํ ๋ฐฉ์์ธ ํธ์ด ๋ถํ ๋ฐฉ์์ ์ฌ์ฉํ๋ค. ํธ์ด๋ถํ ๋ฐฉ์์์๋ ๋ฆฌ์คํธ์์ ์ฒซ๋ฒ์งธ ๋ฐ์ดํฐ๋ฅผ pivot์ผ๋ก ์ค์ ํ๋ค.
1. pivot์ ์ค์
2. ์ผ์ชฝ์์๋ถํฐ๋ pivot๋ณด๋ค ํฐ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๊ณ , ์ค๋ฅธ์ชฝ์์๋ถํฐ๋ pivot๋ณด๋ค ํฐ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋๋ค.
3. ์ฐพ์ ํฐ๋ฐ์ดํฐ์ ์์๋ฐ์ดํฐ๋ฅผ ์๋ก ๊ตํํด์ค๋ค.
4. 2~3๊ณผ์ ์ ๋ฐ๋ณตํ๋ค๊ฐ ๋ง์ฝ ๋ ๋ฐ์ดํฐ๊ฐ ์๊ฐ๋ฆฐ ๊ฒฝ์ฐ์๋ '์์ ๋ฐ์ดํฐ'์ pivot์ ๋ณ๊ฒฝํ๋ค.
5. ์ด์ pivot์ ์ผ์ชฝ ๋ฐ์ดํฐ ๋ฆฌ์คํธ๋ ๋ชจ๋ pivot๋ณด๋ค ์๊ณ , ์ค๋ฅธ์ชฝ ๋ฐ์ดํฐ ๋ฆฌ์คํธ๋ ๋ชจ๋ pivot๋ณด๋ค ํฌ๋ค.
6. ์ผ์ชฝ ๋ฆฌ์คํธ์ ์ค๋ฅธ์ชฝ ๋ฆฌ์คํธ์ ๋ํด์ 1~5๊ณผ์ ์ ๋ค์ ๋ฐ๋ณตํ๋ค๋ณด๋ฉด ๋ชจ๋ ์ ๋ ฌ๋๋ค.
์๊ฐ๋ฆฌ๋ ๋ถ๋ถ์์ ์ฌ์ค ์ดํด๊ฐ ์ด๋ ค์ ๋๋ฐ ๊ตฌ์ฒด์ ์ธ ๋์์ ์ฝ๋๋ก ๋ณด๋ฉด ์ข ๋ ์ดํดํ ์ ์๋ค.
์ ์ํด ๋ ๊ฒ์ 5์ ์ค๋ฅธ์ชฝ ๋ฆฌ์คํธ '876'์์ left๋ ๋ฆฌ์คํธ ๋ฐ๊น์ง ๊ฐ๋ค๋ ๊ฒ์ด๋ค. '67','34'์์ right๋ pivot๊น์ง ๊ฐ๋ค. ์ฝ๋์์ while๊ตฌ๋ฌธ ์์ left <= end์ right > start ๋ถ๋ถ์ ๋ณด๋ฉด ๊ฐ์ด ์ฌ ๊ฒ์ด๋ค.
[์ฝ๋]
array = [5,4,7,3,2,8,1,6]
def quick_sort(array, start, end):
# ์์๊ฐ 1๊ฐ์ธ ๊ฒฝ์ฐ ์ข
๋ฃ
if start >= end:
return
pivot = start # pivot์ ์ฒซ ๋ฒ์งธ ์์
left = start + 1
right = end
# ์๊ฐ๋ฆฌ๊ธฐ ์ ๊น์ง ๋ฐ๋ณต
while(left <= right):
# pivot๋ณด๋ค ํฐ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๋๊น์ง ๋ฐ๋ณต
while(left <= end and array[left] <= array[pivot]):
left += 1
print(left,end)
# pivot๋ณด๋ค ์์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๋๊น์ง ๋ฐ๋ณต
while(right > start and array[right] >= array[pivot]):
right -= 1
# ์๊ฐ๋ ธ๋ค๋ฉด ์์ ๋ฐ์ดํฐ์ pivot์ ์ค์ํ
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)
[ ํต ์ ๋ ฌ์ ์๊ฐ๋ณต์ก๋ ]
ํต ์ ๋ ฌ์ ํ๊ท ์๊ฐ ๋ณต์ก๋๋ O(NlogN)์ด๋ค. pivot์ ์๋ชป ์ค์ ํ๋ ์ต์ ์ ๊ฒฝ์ฐ์๋ O(N^2) ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง ์๋ ์๋ค. ์๋ฅผ ๋ค์ด ํต ์ ๋ ฌ ์ค ํธ์ด๋ถํ ๋ฐฉ์์ ์ ํํ์๋ ์ด๋ฏธ '๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋์ด์๋ ๊ฒฝ์ฐ'์๋ ๋งค์ฐ ๋๋ฆฌ๊ฒ ๋์ํ๋ค. ์์ ์ฝ์ ์ ๋ ฌ์ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋์ด์๋ ๊ฒฝ์ฐ์ ๋งค์ฐ ๋น ๋ฅด๊ฒ ๋์ํ๋ ๊ฒ๊ณผ ๋ฐ๋๋๋ค. ์ค์ ๋ก c++๊ณผ ๊ฐ์ ํต ์ ๋ ฌ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋ ์ ๋ ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ค์ ์ต์ ์ ๊ฒฝ์ฐ์๋ ์๊ฐ ๋ณต์ก๋๊ฐ O(NlogN)์ด ๋๋ ๊ฒ์ ๋ณด์ฅํ ์ ์๋๋ก pivot๊ฐ์ ์ค์ ํ๋ ์ถ๊ฐ์ ์ธ ๋ก์ง์ ๋ํด์ค๋ค.
๐ก ๊ณ์ ์ ๋ ฌ
๋ฐ์ดํฐ์ ํฌ๊ธฐ ๋ฒ์๊ฐ ์์๋, ์ฌ์ฉํ ์ ์๋ ๋งค์ฐ ๋น ๋ฅธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ ํฌ๊ธฐ ๋ฒ์๊ฐ 1,000,000(๋ฐฑ๋ง)์ ๋์ง ์์๋๋ง ์ฌ์ฉํ ์ ์๋ค. ๊ณ์ ์ ๋ ฌ์ ์์ ๋ค๋ฃจ์๋ ์ ํ/์ฝ์ /ํต ์ ๋ ฌ์ ์ง์ ๋ฐ์ดํฐ์ ๊ฐ์ ๋น๊ตํ๋ค์ ์์น๋ฅผ ๋ณ๊ฒฝํ๋ฉฐ ์ ๋ ฌํ๋ ๋ฐฉ์๊ณผ๋ ๋ค๋ฅด๋ค. ๋์๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ๋ค.
1. ๊ฐ์ฅ ํฐ ๋ฐ์ดํฐ์ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ์ ๋ฒ์๊ฐ ๋ชจ๋ ๋ด๊ธธ ์ ์๋ ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๋ค
2. ๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ํ์ธํ๋ฉฐ, ๋ฐ์ดํฐ์ ๊ฐ๊ณผ ๋์ผํ ์ธ๋ฑ์ค์ ๋ฐ์ดํฐ๋ฅผ 1์ฉ ์ฆ๊ฐ์ํจ๋ค.
๋ง์ฝ [2,3,1,6,8,8,8,4,3,2]๋ผ๋ ๋ฐ์ดํฐ๊ฐ ์ฃผ์ด์ก๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฆฌ์คํธ๊ฐ ์์ฑ๋๋ค.
์ธ๋ฑ์ค | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
๊ฐฏ์ | 0 | 1 | 2 | 2 | 1 | 0 | 1 | 0 | 3 |
์ด์ ๋ํ ์ถ๋ ฅ๊ฒฐ๊ณผ๋ 1223346888์ด๋๋ค.
[์ฝ๋]
# ๋ชจ๋ ์์์ ๊ฐ์ด 0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๋ค๊ณ ๊ฐ์
array = [2,3,1,6,8,8,8,4,3,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=' ')
[ ๊ณ์ ์ ๋ ฌ์ ์๊ฐ๋ณต์ก๋ ]
๋ฐ์ดํฐ์ ๊ฐฏ์๋ฅผ M, ๋ฐ์ดํฐ์ ์ต๋๊ฐ ํฌ๊ธฐ๋ฅผ K๋ผ๊ณ ํ ๋, ๊ณ์ ์ ๋ ฌ์ ์๊ฐ๋ณต์ก๋๋ O(N+K)๋ก ์ด์ ๊น์ง ์ดํด๋ณธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ค ๊ฐ์ฅ ๋น ๋ฅด๋ค. ํ์ง๋ง ๋ฐ์ดํฐ์ ์ต๋๊ฐ ํฌ๊ธฐ๋งํผ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ์ฌ๊ฐํ ๋นํจ์จ์ฑ์ ์ด๋ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด 10,000,000์ 1๋ก ๋จ 2๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์๋๋ 10,000,001ํฌ๊ธฐ์ ๋ฆฌ์คํธ๋ฅผ ์ ์ธํด์ผํ๋ค. ๋๋ฌธ์ ๊ณ์ ์ ๋ ฌ์ ๋ฐ์ดํฐ์ ํฌ๊ธฐ ๋ฒ์๊ฐ ์์๋๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๐ก ํ์ด์ฌ ์ ๋ ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ง๊ธ๊น์ง ๋ค์ํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด์ ์์๋ณด์๋ค. ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ๋๋ ์ง์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์์ง๋ง ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด ํจ๊ณผ์ ์ธ ๊ฒฝ์ฐ๊ฐ ๋ ๋ง๋ค. ํ์ด์ฌ์ ๊ธฐ๋ณธ ์ ๋ ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ sorted()ํจ์๋ฅผ ์ ๊ณตํ๋ค. sorted๋ ํต ์ ์ด๊ณผ ๋์ ๋ฐฉ์์ด ๋น์ทํ ๋ณํฉ ์ ๋ ฌ์ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ก๋ค. ๋ณํฉ์ ๋ ฌ์ ์ผ๋ฐ์ ์ผ๋ก ํต์ ๋ ฌ๋ณด๋ค ๋๋ฆฌ์ง๋ง ์ต์ ์ ๊ฒฝ์ฐ์๋ ์๊ฐ๋ณต์ก๋ O(NlogN)์ ๋ณด์ฅํ๋ค๋ ํน์ง์ด ์๋ค.
* sorted()
๋ฆฌ์คํธ, ์งํฉ, ๋์ ๋๋ฆฌ ์๋ฃํ ๋ฑ์ ์ ๋ ฅ๋ฐ์์ ์ ์ด๋ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค. set์ด๋ dictionary์๋ฃํ์ ์ฌ์ฉํด๋ ๋ฐํ๋๋ ๊ฒฐ๊ณผ๋ ๋ฆฌ์คํธ ์๋ฃํ์์ ์ฃผ์ํ์.
array = [2,3,1,4,5]
result = sorted(array)
print(result)
* sort()
๋ฆฌ์คํธ ๊ฐ์ฒด์ ๋ด์ฅํจ์์ด๋ค. sort()๋ ๋ณ๋์ ๋ฐํ ๊ฐ์ด ์๊ณ , ๋ด๋ถ ์์๊ฐ ๋ฐ๋ก ์ ๋ ฌ๋๋ค.
array = [2,3,1,4,5]
array.sort()
print(array)
* keyโญ
sorted()๋ sort()๋ฅผ ์ด์ฉํ ๋์๋ key ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ ์๋ค. key๊ฐ์ผ๋ก๋ ํ๋์ ํจ์๊ฐ ๋ค์ด๊ฐ์ผํ๋ฉฐ ์ด๋ ์ ๋ ฌ ๊ธฐ์ค์ด ๋๋ค.
๋ค์ ์ฝ๋๋ ๋ฆฌ์คํธ๊ฐ ํํ๋ก ๊ตฌ์ฑ๋์ด์์ ๋ ๊ฐ ๋ฐ์ดํฐ์ ๋๋ฒ์งธ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๋ ์ฝ๋์ด๋ค.
array = [('๋ฐ๋๋', 2), ('์ฌ๊ณผ', 1), ('๋น๊ทผ', 3)]
def setting(data):
return data[1]
result = sorted(array, key=setting)
print(result)
[ key์ ๋๋คํจ์ ์ฌ์ฉ ]
array = [('๋ฐ๋๋', 2), ('์ฌ๊ณผ', 1), ('๋น๊ทผ', 3)]
def setting(data):
return data[1]
result = sorted(array, key=lambda data:data[1])
print(result)
(lambda ๋งค๊ฐ๋ณ์ : ํจ์์ ๋ฐํ๊ฐ)ํํ๋ก ๋ฃ์ด์ฃผ๋ฉด๋๋ค.
๐ก ๋ฐฐ์ด ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์
Q1. ์ฑ์ ์ด ๋ฎ์ ์์๋ก ํ์ ์ถ๋ ฅํ๊ธฐ
N๋ช ์ ํ์ ์ ๋ณด๊ฐ ์๋ค. ํ์ ์ ๋ณด๋ ํ์์ ์ด๋ฆ๊ณผ ํ์์ ์ฑ์ ์ผ๋ก ๊ตฌ๋ถ๋๋ค. ๊ฐ ํ์์ ์ด๋ฆ๊ณผ ์ฑ์ ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋ ์ฑ์ ์ด ๋ฎ์ ์์๋๋ก ํ์์ ์ด๋ฆ์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
* ์ ๋ ฅ ์กฐ๊ฑด
- ์ฒซ์งธ์ค์ ํ์์ ์ N์ด ์ ๋ ฅ๋๋ค.(1<=N<=100,000)
* ์ถ๋ ฅ ์กฐ๊ฑด
- ๋๋ฒ์งธ์ค๋ถํฐ N+1๋ฒ์งธ ์ค์๋ ํ์์ ์ด๋ฆ์ ๋ํ๋ด๋ ๋ฌธ์์ด A์ ํ์์ ์ฑ์ ์ ๋ํ๋ด๋ ์ ์ B๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ ๋ ฅ๋๋ค. ๋ฌธ์์ด A์ ๊ธธ์ด์ ํ์์ ์ฑ์ ์ 100์ดํ์ ์์ฐ์์ด๋ค.
* ์ ๋ ฅ ์์
2
ํ๊ธธ๋ 95
์ด์์ 77
* ์ถ๋ ฅ ์์
์ด์์ ํ๊ธธ๋
[๋ฌธ์ ์์ด๋์ด]
ํ์ด์ฌ ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ถฉ๋ถํ ํ ์ ์๋ค.
[์ฝ๋]
n = int(input())
score=[]
for i in range(n):
score.append(input().split())
def student_score(data):
return int(data[1])
result = sorted(score, key=student_score)
for r in result:
print(r[0], end=' ')
Q2. ๋ ๋ฐฐ์ด์ ์์ ๊ต์ฒด
๋๋น์ด๋ ๋ ๊ฐ์ ๋ฐฐ์ด A์ B๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๋ ๋ฐฐ์ด์ N๊ฐ์ ์์๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, ๋ฐฐ์ด์ ์์๋ ๋ชจ๋ ์์ฐ์ ์ด๋ค. ๋๋น์ด๋ ์ต๋ K๋ฒ์ ๋ฐ๊ฟ์น๊ธฐ ์ฐ์ฐ์ ์ํํ ์ ์๋๋ฐ, ๋ฐ๊ฟ์น๊ธฐ ์ฐ์ฐ์ด๋ ๋ฐฐ์ด A์ ์๋ ์์ํ๋์ ๋ฐฐ์ด B์ ์๋ ์์ ํ๋๋ฅผ ๊ณจ๋ผ์ ๋ ์์๋ฅผ ์๋ก ๋ฐ๊พธ๋ ๊ฒ์ ๋งํ๋ค. ๋๋น์ด์ ์ต์ข ๋ชฉํ๋ ๋ฐฐ์ด A์ ๋ชจ๋ ์์์ ํฉ์ด ์ต๋๊ฐ ๋๋๋ก ํ๋ ๊ฒ์ด๋ค.
N, K๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ด A์ B์ ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋ ์ต๋ K๋ฒ์ ๋ฐ๊ฟ์น๊ธฐ ์ฐ์ฐ์ ์ํํ์ฌ ๋ง๋ค ์ ์๋ ๋ฐฐ์ด A์ ๋ชจ๋ ์์์ ํฉ์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
* ์ ๋ ฅ ์กฐ๊ฑด
- ์ฒซ๋ฒ์งธ ์ค์ N, K๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ ๋ ฅ๋๋ค.(1<=N<=100,000, 0<=K<=N)
- ๋๋ฒ์งธ ์ค์ ๋ฐฐ์ด A์ ์์๋ค์ด ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ ๋ ฅ๋๋ค. ๋ชจ๋ ์์๋ 10,000,000๋ณด๋ค ์์ ์์ฐ์์ด๋ค.
- ์ธ๋ฒ์งธ์ค์ ๋ฐฐ์ด B์ ์์๋ค์ด ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ ๋ ฅ๋๋ค. ๋ชจ๋ ์์๋ 10,000,000๋ณด๋ค ์์ ์์ฐ์์ด๋ค.
* ์ถ๋ ฅ ์กฐ๊ฑด
- ์ต๋ K๋ฒ์ ๋ฐ๊ฟ์น๊ธฐ ์ฐ์ฐ์ ์ํํ์ฌ ๋ง๋ค ์ ์๋ ๋ฐฐ์ด A์ ๋ชจ๋ ์์์ ํฉ์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.
* ์ ๋ ฅ ์์
5 3
1 2 5 4 3
5 5 6 6 5
* ์ถ๋ ฅ ์์
26
[๋ฌธ์ ์์ด๋์ด]
ํ์ด์ฌ ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ถฉ๋ถํ ํ ์ ์๋ค.
[์ฝ๋]
n, k = map(int,input().split())
# ๋ฐฐ์ด ์ ๋ณด ์
๋ ฅ๋ฐ๊ธฐ
a = list(map(int, input().split()))
b = list(map(int, input().split()))
a.sort()
b.sort(reverse=True)
for i in range(k):
# a๊ฐ b๋ณด๋ค ์์ ๊ฒฝ์ฐ์๋ง
if a[i] < b[i]:
a[i], b[i] = b[i], a[i]
else:
break
print(sum(a))
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ with Python (0) | 2021.05.23 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ์ด์งํ์ with Python (0) | 2021.05.22 |
[์๊ณ ๋ฆฌ์ฆ] BFS with Python (1) | 2021.05.22 |
[์๊ณ ๋ฆฌ์ฆ] DFS with Python (0) | 2021.05.22 |
[์๊ณ ๋ฆฌ์ฆ] ๊ตฌํ with Python (0) | 2021.05.21 |