728x90
문제
동혁이는 나무 조각을 5개 가지고 있다.
나무 조각에는 1부터 5까지 숫자 중 하나가 쓰여져 있다.
또, 모든 숫자는 다섯 조각 중 하나에만 쓰여 있다.
동혁이는 나무 조각을 다음과 같은 과정을 거쳐서 1, 2, 3, 4, 5 순서로 만들려고 한다.
1. 첫 번째 조각의 수가 두 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
2. 두 번째 조각의 수가 세 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
3. 세 번째 조각의 수가 네 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
4. 네 번째 조각의 수가 다섯 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
5. 만약 순서가 1, 2, 3, 4, 5 순서가 아니라면 1 단계로 다시 간다.
처음 조각의 순서가 주어졌을 때, 위치를 바꿀 때 마다 조각의 순서를 출력하는 프로그램을 작성하시오.
https://www.acmicpc.net/problem/2947
입력
첫째 줄에 조각에 쓰여 있는 수가 순서대로 주어진다.
숫자는 1보다 크거나 같고, 5보다 작거나 같으며, 중복되지 않는다.
처음 순서는 1, 2, 3, 4, 5가 아니다.
출력
두 조각의 순서가 바뀔때 마다 조각의 순서를 출력한다.
예제
# input
2 1 5 3 4
# output
1 2 5 3 4
1 2 3 5 4
1 2 3 4 5
# input
2 3 4 5 1
# output
2 3 4 1 5
2 3 1 4 5
2 1 3 4 5
1 2 3 4 5
문제 풀이
# 입력 받기
arr = list(map(int, input().split()))
# 대조할 정답 변수
answer = [1, 2, 3, 4, 5]
while True:
for i in range(4):
# i가 i+1보다 클 경우 변경을 반복
if arr[i] > arr[i+1]:
arr[i], arr[i+1] = arr[i+1], arr[i]
# 변경될 때마다 출력
print(*arr)
# arr과 answer이 같아지면 break
if arr == answer:
break
파이썬을 독학하시는 분들에게 도움이 되길 바라며,
혹 더 좋은 방법이 있거나 오류가 있다면 편하게 말씀 부탁드립니다.
728x90