백준 2751 파이썬 병합정렬
2024. 2. 21. 07:50ㆍ코딩 도구/백준
반응형
백준 2751 - 수 정렬하기 2
문제
https://www.acmicpc.net/problem/2751
답안 코드 :
import sys
input = sys.stdin.readline
print = sys.stdout.write
def merge_sort(s, e):
if e - s < 1: return
m = int(s + (e - s) / 2)
merge_sort(s, m)
merge_sort(m + 1, e)
for i in range(s, e + 1):
tmp[i] = A[i]
k = s
index1 = s
index2 = m + 1
while index1 <= m and index2 <= e:
if tmp[index1] > tmp[index2]:
A[k] = tmp[index2]
k += 1
index2 += 1
else:
A[k] = tmp[index1]
k += 1
index1 += 1
while index1 <= m:
A[k] = tmp[index1]
k += 1
index1 += 1
while index2 <= e:
A[k] = tmp[index2]
k += 1
index2 += 1
N = int(input())
A = [0] * int(N + 1)
tmp = [0] * int(N + 1)
for i in range(1, N + 1):
A[i] = int(input())
merge_sort(1, N)
for i in range(1, N + 1):
print(str(A[i]) + '\n')
생각 :
# 문제 분석
# N의 최대 범위 1,000,000 이므로 O(nlogn)의 시간복잡도로 정렬
# 병합 정렬 사용해본다
# 문제 풀이
# 정렬할 그룹을 최소 길이로 나누기
# 나눈 그룹마다 병합정렬
# ! 각 그룹마다 index 1, index 2를 지정해서 비교하면서 tmp배열에 병합 정렬
# 그 후 index 이동해서 다시 정렬
정렬알고리즘
반응형
'코딩 도구 > 백준' 카테고리의 다른 글
백준 10989 파이썬 기수정렬 계수정렬 (32) | 2024.02.24 |
---|---|
백준 1517 파이썬 병합정렬 손풀이 플레티넘 (44) | 2024.02.22 |
백준 11004 파이썬 퀵 정렬 (1) | 2024.02.20 |
백준 11399 파이썬 삽입정렬 그리디 (38) | 2024.02.19 |
백준 1427 파이썬 선택 정렬 사용 (33) | 2024.02.18 |