๋ฌธ์
๋ฐฑ์ค 11582 ์นํจ TOP N
https://www.acmicpc.net/problem/11582
๋ฌธ์ ํ์ด
merge sort ์ ์ค๊ฐ ๊ณผ์ ์ ์ถ๋ ฅํ๋ ๋ฌธ์ ; k๋ช
์ด ์ ๋ ฌํ๋ ๋จ๊ณ๊ฐ ์๋ฃ๋ ์ํ ์ถ๋ ฅ
merge ํจ์๋ฅผ ๋ง๋ค์ด์ merge sort ์งํํ๊ธฐ
check ํจ์๋ฅผ ๋ง๋ค์ด์ k๋ช
๋ฏธ๋ง์ด ์ ๋ ฌํ๋ฉด ์ ๋ ฌ ์ค์ง์ํค๊ธฐ
์ฝ๋
import sys
input=sys.stdin.readline
def check(s,e):
if((e-s)>(n/k)): ##์ ๋ ฌ ์ ์ง ์กฐ๊ฑด
return
mid=int((s+e)/2);
idx1=s; idx2=mid+1; idx3=0;
while(idx1<=mid and idx2<=e):
if(num[idx1]<=num[idx2]):
tmp[idx3]=num[idx1]
idx3+=1; idx1+=1
else:
tmp[idx3]=num[idx2]
idx3+=1; idx2+=1
while(idx1<=mid):
tmp[idx3]=num[idx1]
idx3+=1; idx1+=1
while(idx2<=e):
tmp[idx3]=num[idx2]
idx3+=1; idx2+=1
for i in range(s,e+1):
num[i]=tmp[i-s]
def merge(s,e):
if s==e:
return
mid=int((s+e)/2)
merge(s,mid)
merge(mid+1,e)
check(s,e)
n=int(input())
num=list(map(int,input().split()))
tmp=[0]*n
k=int(input())
merge(0,n-1)
print(*num)
์ฌ๊ธฐ์
- if(e-s>n/k): return
- e-s = ์ ๋ ฌ์ค์ธ ๋ฆฌ์คํธ์ ํฌ๊ธฐ , (n/k) = k๋ช ๋น ์ ๋ ฌํด์ผํ๋ ๋ฐฐ์ด์ ํฌ๊ธฐ
์ ์๋ฏธ!
์ด๋ ค์ ๋ ์
์ฝ๋ ์ง๋๊ฑฐ ์์ฒด๋ ํฌ๊ฒ ์ด๋ ค์ด ๊ฒ ์๋์๋๋ฐ ์ ๋ ฌ ์ ์ง ์กฐ๊ฑด์ ์๊ฐํ๋ ๊ฒ์ด ์ข ์ด๋ ค์ ๋ค
๊ทธ ๋จ๊ณ๊ฐ ์๋ฃ๋ ์ดํ์ ์ ๋ ฌ ๊ฐ์ ์ถ๋ ฅํ๋ ๊ฒ์ด๋ผ์ ๋ ํท๊ฐ๋ ธ์ ใ ใ
'๐ปAlgorithm > PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ/๋ฐฑ์ค] 1074 Z - ํ์ด์ฌ (0) | 2021.09.17 |
---|---|
[BOJ/๋ฐฑ์ค] 14891 ํฑ๋๋ฐํด - ํ์ด์ฌ (0) | 2021.09.15 |
[BOJ/๋ฐฑ์ค] 13302 ๋ฆฌ์กฐํธ - ํ์ด์ฌ (0) | 2021.08.25 |
[BOJ/๋ฐฑ์ค] 20923 ์ซ์ ํ ๋ฆฌ๊ฐ๋ฆฌ ๊ฒ์ - ํ์ด์ฌ (0) | 2021.08.24 |
[BOJ/๋ฐฑ์ค] 17396 ๋ฐฑ๋์ด - ํ์ด์ฌ (0) | 2021.08.23 |