๐ฉ๐ป๐พ
[๋ฐฑ์ค/Python] 2761๋ฒ ์ ์ ๋ ฌํ๊ธฐ 2 ๋ณธ๋ฌธ
1๏ธโฃ๋ฌธ์ ์ค๋ช
N๊ฐ์ ์๊ฐ ์ฃผ์ด์ก์ ๋, ์ด๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
2๏ธโฃ์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ ๊ฐ์ N(1 ≤ N ≤ 1,000,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ด ์๋ ์ ๋๊ฐ์ด 1,000,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์์ด๋ค. ์๋ ์ค๋ณต๋์ง ์๋๋ค.
3๏ธโฃ์ถ๋ ฅ
์ฒซ์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ ๊ฒฐ๊ณผ๋ฅผ ํ ์ค์ ํ๋์ฉ ์ถ๋ ฅํ๋ค.
๐ฉ๐ป๐ป์์ฑํ ์ฝ๋
1. ๋ณํฉ์ ๋ ฌ์ ์ฌ์ฉํ ์ฝ๋
import sys
input = sys.stdin.readline
def merge_sort(list):
if len(list) <= 1:
return list
mid = len(list)//2
left = merge_sort(list[:mid])
right = merge_sort(list[mid:])
i, j, k = 0, 0, 0
sort_res = [] # ์ ๋ ฌํ ๋ฆฌ์คํธ ๋ด์
while i < len(left) and j < len(right):
if left[i] < right[j]:
sort_res.append(left[i])
i += 1
else:
sort_res.append(right[j])
j += 1
sort_res += left[i:]
sort_res += right[j:]
return sort_res
n = int(input()) # ์
๋ ฅ ๋ฐ์ ์์ ๊ฐ์
num = [] # ์
๋ ฅ ๋ฐ์ n๊ฐ์ ์ ์ ์ฅํ ๋ฆฌ์คํธ
for i in range(n):
num.append(int(input()))
num = merge_sort(num)
for i in num:
print(i)
2. sort() ํจ์๋ฅผ ์ฌ์ฉํ ์ฝ๋
import sys
input = sys.stdin.readline
n = int(input())
num = []
for i in range(n):
num.append(int(input()))
num.sort()
for i in range(n):
print(num[i])
๐ก์ฝ๋ ์ค๋ช
์ด ๋ฌธ์ ๋ ๋ณํฉ์ ๋ ฌ๊ณผ sort() ํจ์๋ฅผ ์ฌ์ฉํด์ ์ด 2๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ํ์ด๋ดค๋ค.
๋ณํฉ์ ๋ ฌ์ด๋?
๋ถํ ·์ ๋ณต ๋ฐฉ์์ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํ๊ณ ๋ถํ ํ ์งํฉ์ ์ ๋ ฌํ๋ฉฐ ํฉ์น๋ ๋ฐฉ์์ด๋ค.
์๊ฐ ๋ณต์ก๋๋ O(nlogn)์ด๋ค.
๋ณํฉ์ ๋ ฌ์ ์ฌ์ฉํ ์ฝ๋์์ merge_sort() ํจ์๋ฅผ ์ค๋ช ํ๋ฉด, ์ฌ๊ทํจ์๋ฅผ ์ฌ์ฉํด์ ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ 1๋ณด๋ค ์์์ง๊ธฐ ์ ๊น์ง ๋ฐ์ผ๋ก ๊ณ์ ๋๋์ด ๋๊ฐ์ ๋ฐฐ์ด์ ๋๋ ๋ด์ ํ, ์ ๋ ฌ์ ์งํํ๋ค.
์ธ๋ฑ์ค 3๊ฐ( = i, j, k )๋ฅผ ์ ์ธํด์ฃผ๊ณ , while๋ฌธ์์ ๋ ๋ฐฐ์ด์ ๊ฐ์ ๋น๊ตํ์ ๋ ๋ ์์ ๊ฐ์ sort_res์ appendํด์ฃผ๊ณ , ๋ ์์ ๊ฐ์ ๊ฐ๋ฅดํค๊ณ ์๋ ์ธ๋ฑ์ค์ ๊ฐ์ +1 ํด์ค๋ค.
'์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/Python] 11724๋ฒ ์ฐ๊ฒฐ ์์์ ๊ฐ์ ๊ตฌํ๊ธฐ (0) | 2023.02.19 |
---|---|
[๋ฐฑ์ค/Python] 10989๋ฒ ์ ์ ๋ ฌํ๊ธฐ3 (0) | 2023.02.19 |
[๋ฐฑ์ค/Python] 1427๋ฒ ์ํธ์ธ์ฌ์ด๋ (0) | 2023.02.10 |
[๋ฐฑ์ค/Python] 11399๋ฒ ATM (0) | 2023.02.09 |
[๋ฐฑ์ค/Python] 10814๋ฒ ๋์ด์ ์ ๋ ฌ (0) | 2023.02.07 |