해당 문제는 큐를 사용해서 해결할 수 있다.
큐를 사용하면 카드의 순서대로 제거하고, 제거 후 남은 카드 중 첫 번째 카드를 맨 뒤로 옮기는 동작을 쉽게 구현할 수 있게 된다. 파이썬에서는 collections.deque를 사용하여 큐를 효율적으로 구현할 수 있음!
from collections import deque
def card_game(N):
# 1부터 N까지의 카드 번호를 덱에 추가
cards = deque(range(1, N + 1))
discarded = []
# 카드가 한 장 남을 때까지 반복
while len(cards) > 1:
# 제일 위의 카드를 버림
discarded.append(cards.popleft())
# 제일 위의 카드를 제일 아래로 옮김
cards.append(cards.popleft())
print(" ".join(map(str, discarded + list(cards))))
# 입력을 받아 함수 호출
N = int(input())
card_game(N)
먼저 deque 모듈을 사용해서 카드들을 큐로 관리한다.
popleft()를 사용하여 제일 위에 있는 카드를 버리고, append()를 사용하여 다음 카드를 맨 아래로 이동한다.
해당 작업을 반복하여 카드가 한 장만 남을 때까지 계속한다.
마지막으로는 버린 카드의 순서를 저장하고, 마지막 남은 카드를 같이 join을 통해 공백을 기준으로 한 줄로 출력한다.
'Python' 카테고리의 다른 글
[Python] 파이썬 random 모듈 내장 함수 정리 (0) | 2024.08.25 |
---|---|
[백준/Python] 20920 : 영단어 암기는 괴로워 (0) | 2024.08.18 |
[백준/Python] 2606 : 바이러스 (0) | 2024.08.07 |
[백준/Python] 1260 : DFS와 BFS (0) | 2024.08.07 |
[백준/Python] 1874 : 스택 수열 (0) | 2024.07.29 |