알고리즘 강의 | Do it! 알고리즘 코딩테스트 with Python - 버블 정렬 프로그램 2

2023. 12. 7. 22:00·ALGORITHM

021 버블 정렬 프로그램 2 (백준 1517번)

 

1517번: 버블 소트

첫째 줄에 N(1 ≤ N ≤ 500,000)이 주어진다. 다음 줄에는 N개의 정수로 A[1], A[2], …, A[N]이 주어진다. 각각의 A[i]는 0 ≤ |A[i]| ≤ 1,000,000,000의 범위에 들어있다.

www.acmicpc.net

처음에는 버블 정렬 구현했던 코드에서 실제 swap 이루어지는 부분을 카운트 해주기만 하면 된다고 생각했는데 입력 데이터의 크기가 50만이었기 때문에 n²의 시간복잡도로는 풀 수 없다는 것을 알게되었다. 버블 정렬의 시간복잡도 자체가 n²이기 때문에 버블 정렬이 아닌 병합 정렬을 사용해야함..

 

 

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] # tmp에 값 복사
    
    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 # swap 값 카운트
            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) # 0번째 값을 채워주는 용도
tmp = [0] * int(N+1) 
merge_sort(1,N)
print(result)
반응형

'ALGORITHM' 카테고리의 다른 글

알고리즘 강의 | Do it! 알고리즘 코딩테스트 with Python - DFS  (1) 2023.12.08
알고리즘 강의 | Do it! 알고리즘 코딩테스트 with Python - 기수 정렬  (0) 2023.12.07
알고리즘 강의 | Do it! 알고리즘 코딩테스트 with Python - 퀵/병합 정렬  (1) 2023.12.06
알고리즘 강의 | Do it! 알고리즘 코딩테스트 with Python - ATM 인출 시간 계산하기  (0) 2023.12.04
알고리즘 강의 | Do it! 알고리즘 코딩테스트 with Python - 버블/선택/삽입 정렬  (0) 2023.12.04
'ALGORITHM' 카테고리의 다른 글
  • 알고리즘 강의 | Do it! 알고리즘 코딩테스트 with Python - DFS
  • 알고리즘 강의 | Do it! 알고리즘 코딩테스트 with Python - 기수 정렬
  • 알고리즘 강의 | Do it! 알고리즘 코딩테스트 with Python - 퀵/병합 정렬
  • 알고리즘 강의 | Do it! 알고리즘 코딩테스트 with Python - ATM 인출 시간 계산하기
진미
진미
  • 진미
    ABC
    진미
  • 전체
    오늘
    어제
    • 분류 전체보기 (65)
      • PROJECT (3)
      • ALGORITHM (43)
      • STUDY (3)
        • 리액트 (7)
        • 파이썬 (2)
      • 기타 (5)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
    • 설정
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
진미
알고리즘 강의 | Do it! 알고리즘 코딩테스트 with Python - 버블 정렬 프로그램 2
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.