[BOJ Python] 1835번 카드

Date:     Updated:

카테고리:

태그:

카드

📃 문제

1부터 N까지의 숫자가 적힌 카드가 있다. 찬유는 이 카드를 가지고 마술을 하려 한다. 마술을 하는 순서는 다음과 같다.

먼저 1부터 N까지의 숫자가 적힌 카드에서 첫 번째 카드를 가장 뒤로 옮긴다. 그러고 나서 첫 번째 카드를 책상 위에 올려놓는다. 그런데 그 카드는 1이 되어야 한다. 그리고 남은 카드 중에서 첫 번째 카드를 가장 뒤로 옮기고, 또 가장 앞에 있는 카드를 가장 뒤로 옮긴다.(2번 반복) 그리고 가장 앞에 있는 카드를 책상 위에 올려놓는다. 그런데 그 카드는 2가 되어야 한다. 또 남은 카드 중에서 첫 번째 카드를 가장 뒤로 옮기고… (3번 반복) 그리고 가장 앞에 있는 카드를 책상위에 올려놓는데 그것은 3이 된다. 또 남은 카드 중에서 첫 번째 카드를 가장 뒤로 옮기고.. (4번 반복) 그리고 가장 앞에 있는 카드를 책상 위에 올려놓는데 그것은 4이다. 위 과정을 계속 반복하여 N번 카드만 남을 때 까지 반복한다. 위와 같은 카드를 하려면 미리 카드의 순서를 알고 있어야 한다. 카드의 개수 N이 주어져 있을 때 위의 마술을 하기 위한 카드의 초기 순서를 구하는 프로그램을 작성하시오.

📬 입력

첫째 줄에 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1000)

📭 출력

첫 번째 줄부터 N번째 줄까지 차례로 카드의 순서를 출력한다.

🙆🏻‍♂️ 문제 답안

  • 내가 제출한 답
      import sys
      from collections import deque
    
      n = int(sys.stdin.readline().rstrip())
      queue = deque()
    
      for i in reversed(range(1, n+1)):
          queue.appendleft(i)
          if len(queue) > 1:
              cnt = 0
              while True:
                  if cnt == i:
                      break
                  queue.appendleft(queue[-1])
                  # print(queue)
                  queue.pop()
                  # print(queue)            
                  cnt += 1
          elif len(queue) == 1:
              continue
      print(*queue)
    

🙋🏻‍♂️ 개인 공부&기록 블로그입니다. 오류나 틀린 부분이 있을 경우 
   비난 및 비판 보다는 댓글을 통해 이슈작성 부탁드립니다. 🙋🏻‍♂️

맨 위로 이동하기

BaekJoon 카테고리 내 다른 글 보러가기

댓글 남기기