백준 [ALGORITHM] - 버블 소트 (1517)
2025. 7. 27. 16:48ㆍ코딩/백준 [ALGORITHM]
반응형
import sys
input = sys.stdin.readline
N = int(input().strip())
arr = []
arr = list(map(int, input().split()))
count = 0
def merge_sort(arr):
if len(arr) <= 1:
return arr
mid = len(arr) // 2
lefts = merge_sort(arr[:mid])
rights = merge_sort(arr[mid:])
return merge(lefts, rights)
def merge(lefts, rights):
result = []
global count
i = j = 0
while i < len(lefts) and j < len(rights):
if lefts[i] <= rights[j]:
result.append(lefts[i])
i += 1
else:
result.append(rights[j])
count += len(lefts) - i
j += 1
result.extend(lefts[i:])
result.extend(rights[j:])
return result
ans = merge_sort(arr)
print(count)
플레5 문제 풀어봤다.
문제 이름 처럼 버블 소트를 사용해서 풀면 시간초과로 풀지 못하고, 병합 정렬을 이용해서 풀면 풀린다.
요즘 소트 공부 중인데 개념은 쉽지만 응용을 하려니까 머리가 아프다.
이 문제는 역순쌍이라는 개념을 이용해서 좌측에 있는 배열에 i<j인 상황에서 좌측 배열의 A[i:]의 길이 값이 swap한 숫자가 되기에 이를 이용해서 풀었다.
반응형
'코딩 > 백준 [ALGORITHM]' 카테고리의 다른 글
백준 [ALGORITHM] - 버블 소트 (1377) (0) | 2025.07.05 |
---|---|
백준 [ALGORITHM] - 좌표 정렬하기2 (11651) (0) | 2024.12.11 |
백준 [ALGORITHM] - 수 이어 쓰기 1 (1748) (0) | 2024.12.10 |
백준 [ALGORITHM] - 알파벳 개수 (10808) (1) | 2024.12.06 |
백준 [ALGORITHM] - 수들의 합2 (2003) (0) | 2024.12.05 |