https://www.acmicpc.net/problem/11582
문제
정답 풀이
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)
출처:https://dank-code.tistory.com/2
해석
글이 이것밖에 안남은 블로그인데 파이썬 해답은 또 이것뿐이라 챙겨왔다.
'코딩 > 알고리즘 정답 or 풀이' 카테고리의 다른 글
[해시] 프로그래머스 -완주하지못한선수 c++ (1) | 2021.12.30 |
---|---|
백준 2231번 분해합 c++ (0) | 2021.12.30 |
백준 11653번 소인수분해 (0) | 2021.11.05 |
백준 6159번 코스튬 파티 (0) | 2021.11.02 |
[분할정복] 백준 1780번 종이의 개수 with Python3 (0) | 2021.08.18 |
댓글