첫번째 코드
버블 소트 문제인 만큼, 버블 소트를 이용하여 정렬하면서 swap을 한 경우 1씩 결과에 저장해주는 코드를 작성한다.
import sys
input = sys.stdin.readline
n = int(input())
A = list(map(int, input().split()))
swap_count = 0
for i in range(n-1):
for j in range(n-i-1):
if A[j] > A[j+1]:
tmp = A[j]
A[j] = A[j+1]
A[j+1] = tmp
swap_count += 1
print(swap_count)
맞는 듯 하나 시간초과가 나타난다...
두번째 코드
책을 참고하여 진행한 결과 이 문제는 병합 정렬을 이용하여 푸는 것이다!
이때 코드는 이전 문제와 거의 동일하나 중간에 swap한 경우 해당 개수를 더해주는 것이 추가되었다.
import sys
input = sys.stdin.readline
result = 0
def merge_sort(s, e):
global result
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]
result = result + index2 - k
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 = list(map(int, input().split()))
a.insert(0, 0)
tmp = [0] * int(n + 1)
merge_sort(1, n)
print(result)
통과!
병합 정렬 자체를 혼자서 푸는 코드를 여러번 작성해보아야 할 것 같다...으어 어렵다 ㅠㅠ
링크
programmers/백준/Platinum/1517. 버블 소트 at main · ornni/programmers
repository for recording Programmers Algorithm problem solving - ornni/programmers
github.com
'코딩 테스트 > do it! 알고리즘 코딩테스트' 카테고리의 다른 글
023 연결 요소의 개수 (0) | 2024.05.09 |
---|---|
022 수 정렬하기 3 (0) | 2024.05.07 |
020 수 정렬하기 2 (0) | 2024.05.02 |
019 K번째 수 (미해결) (0) | 2024.05.02 |
018 ATM (0) | 2024.04.30 |