코딩테스트
[백준] 나무 조각
져니01
2025. 3. 8. 19:48
문제보기 - https://www.acmicpc.net/problem/2947
문제명 - 나무 조각
난이도 - B1
문제유형 - 구현
풀이일자 - 25.03.08
📌 문제 탐색하기
- 1~5까지 중복되지 않은 조각을 입력받음
- 두 인접한 조각을 비교하여 큰 숫자가 오른쪽으로 이동하도록 교환 -> 버블정렬
- 조각이 이동할 때마다 상태를 출력
🛠 시간복잡도 확인
- 최악의 경우 [5, 4, 3, 2, 1]에서 총 10번(4+3+2+1)의 비교 및 교환 발생
- 버블 정렬과 동일한 O(N²) 연산 수행
📌 코드 설계하기
- 다섯 개의 정수를 입력받고 리스트에 저장하기
- list(map(int, sys.stdin.readline().split())) 활용
- 리스트에서 인접한 두 요소를 비교하기
- 정렬이 완료될 때까지 반복 while N != sorted(N)
- 리스트에서 인접한 두 요소를 비교 N[i] > N[i+1]
- if N[i] > N[i+1]: 앞의 값이 더 크면 두 값을 교환 -> temp활용
- 교환 후 현재 리스트 상태 출력하기
- 리스트를 숫자만 출력하기 위해 print(*N) 활용
📌 정답 코드(1회차)
import sys
# 1. 다섯 개의 정수를 입력받고 리스트에 저장하기
N = list(map(int, sys.stdin.readline().split()))
# 2. 리스트에서 인접한 두 요소를 비교하기
while N != sorted(N):
for i in range(4):
if N[i] > N[i+1]:
temp = N[i]
N[i] = N[i+1]
N[i+1] = temp
print(*N) # 3. 교환이 일어날 때마다 리스트 상태 출력하기
🫧 버블 정렬 (Bubble Sort) 이란?
인접한 두 개의 숫자를 비교하면서 큰 숫자를 오른쪽으로 이동시키는 정렬 알고리즘
거품이 물 위로 떠오르는 것처럼 큰 숫자가 반복적으로 오른쪽 끝으로 이동한다고 해서 "버블 정렬"이라고 함.