코딩테스트

[백준] 나무 조각

SigmoidFunction 2022. 6. 24. 13:42
728x90

https://www.acmicpc.net/problem/2947

 

2947번: 나무 조각

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

www.acmicpc.net

더보기

 

브론즈 1단계인가 되는 문제다.

 

문제

동혁이는 나무 조각을 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가 아니다.

출력

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

예제 입력 1 복사

2 1 5 3 4

예제 출력 1 복사

1 2 5 3 4
1 2 3 5 4
1 2 3 4 5

예제 입력 2 복사

2 3 4 5 1

예제 출력 2 복사

2 3 4 1 5
2 3 1 4 5
2 1 3 4 5
1 2 3 4 5

출처

Contest > Croatian Open Competition in Informatics > COCI 2008/2009 > Contest #4 1번

 

브론즈답게 문제가 아주 어렵진 않았다. 바뀌는 순서가 어떻게 진행되는 지 살펴봤고

 

한번 쭉 훑은다음에 다시 처음부터 진행되는 방식이라서 그걸 포인트로 잡고 코드를 작성했다.

# 5개를 리스트로 받아옴
wood = list(map(int, input().split()))

while True: # 예제를 보니 순차적으로 돌고 다시 반복하는 것을 확인함
    if sorted(wood) == wood: # 오름차순 정렬과 같아질 때까지 반복
        break
    else:
        for i in range(len(wood)-1): # 0,1,2,3 으로 나와있기 때문에 길이 4에서 1개 빼줌
            if wood[i] > wood[i+1]: # 다음 것보다 크면
                temp = wood[i] # 현재꺼 저장
                wood[i] = wood[i+1] # 현재 원소값을 바꿔줌
                wood[i+1] = temp  # 다음 원소값을 바꿔줌
                print(" ".join(map(str, wood))) # 바꿔준 내용 출력
            else:
                continue

더 깔끔하게 할 수 없을까 했는데 다른 블로그들에서는 그냥 temp없이 하더라

# 5개를 리스트로 받아옴
wood = list(map(int, input().split()))

while True: # 예제를 보니 순차적으로 돌고 다시 반복하는 것을 확인함
    if sorted(wood) == wood: # 오름차순 정렬과 같아질 때까지 반복
        break
    else:
        for i in range(len(wood)-1): # 0,1,2,3 으로 나와있기 때문에 길이 4에서 1개 빼줌
            if wood[i] > wood[i+1]: # 다음 것보다 크면
            ###############################################
            	wood[i+1], wood[i] = wood[i], wood[i+1] # 이런 느낌?
             ################################################
                print(" ".join(map(str, wood))) # 바꿔준 내용 출력
            else:
                continue

저게 더 깔끔하긴 한듯하다

728x90