본문 바로가기

개발공부/코테

[백준 2947번: 나무조각] 파이썬 풀이_버블정렬(Bubble Sort)

 

 

2947번: 나무 조각

첫째 줄에 조각에 쓰여 있는 수가 순서대로 주어진다. 숫자는 1보다 크거나 같고, 5보다 작거나 같으며, 중복되지 않는다. 처음 순서는 1, 2, 3, 4, 5가 아니다.

www.acmicpc.net


문제

동혁이는 나무 조각을 5개 가지고 있다. 나무 조각에는 1부터 5까지 숫자 중 하나가 쓰여져 있다. 또, 모든 숫자는 다섯 조각 중 하나에만 쓰여 있다.

동혁이는 나무 조각을 다음과 같은 과정을 거쳐서 1, 2, 3, 4, 5 순서로 만들려고 한다.

  1. 첫 번째 조각의 수가 두 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
  2. 두 번째 조각의 수가 세 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
  3. 세 번째 조각의 수가 네 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
  4. 네 번째 조각의 수가 다섯 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
  5. 만약 순서가 1, 2, 3, 4, 5 순서가 아니라면 1 단계로 다시 간다.

처음 조각의 순서가 주어졌을 때, 위치를 바꿀 때 마다 조각의 순서를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 조각에 쓰여 있는 수가 순서대로 주어진다. 숫자는 1보다 크거나 같고, 5보다 작거나 같으며, 중복되지 않는다. 처음 순서는 1, 2, 3, 4, 5가 아니다.

출력

두 조각의 순서가 바뀔때 마다 조각의 순서를 출력한다.

 

 


풀이

num_list = list(map(int, input().split()))

while num_list != [1, 2, 3, 4, 5]:
    for i in range(4):
        if num_list[i]>num_list[i+1]:
            temp = num_list[i]
            num_list[i] = num_list[i+1]
            num_list[i+1] = temp
            for k in num_list:
                print(k, end=" ")
            print()

 

i번째 나무조각과 i+1번째 나무조각의 크기를 비교해서 크면 위치를 바꾸도록 for문을 돌리고

리스트가 [1, 2, 3, 4, 5]가 될 때 while문을 빠져나도록 구성했다.

 


버블 정렬(Bubble Sort)이란?

인접한 두 요소를 비교하고 순서가 잘못되었다면 위치를 교환하여 정렬하는 과정을 반복하는 것을 말한다.

 

버블정렬 동작 예시

 

버블정렬 시간복잡도

O^2의 시간 복잡도를 가진다

 


참고한 링크

 

[Algorithm] 버블 정렬(Bubble Sort) (with Python)

안녕하세요, 성조입니다. 이번 포스팅은 버블 정렬(Bubble Sort)에 대해서 정리해 봅니다. 혹여나 올바르지 못한 지식 전달이 있다면 언제든지 댓글 남겨주시면 감사드리겠습니다. 버블 정렬(Bubble S

okeybox.tistory.com