카드1 - 문제 2161
성능 요약
메모리: 34008 KB, 시간: 56 ms
분류
자료 구조, 구현, 큐
제출 일자
2024년 11월 12일 15:17:45
문제 설명
N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다.
이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다. 우선, 제일 위에 있는 카드를 바닥에 버린다. 그 다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다.
예를 들어 N=4인 경우를 생각해 보자. 카드는 제일 위에서부터 1234
의 순서로 놓여있다. 1
을 버리면 234
가 남는다. 여기서 2
를 제일 아래로 옮기면 342
가 된다. 3
을 버리면 42
가 되고, 4
를 밑으로 옮기면 24
가 된다. 마지막으로 2
를 버리고 나면, 버린 카드들은 순서대로 1 3 2
가 되고, 남는 카드는 4
가 된다.
N이 주어졌을 때, 버린 카드들을 순서대로 출력하고, 마지막에 남게 되는 카드를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 정수 N
(1 ≤ N ≤ 1,000)이 주어진다.
출력
첫째 줄에 버리는 카드들을 순서대로 출력한다. 제일 마지막에는 남게 되는 카드의 번호를 출력한다.
<내 코드>
import sys
from collections import deque
N = int(sys.stdin.readline().strip())
queue = deque(str(_) for _ in range(1, N + 1))
while queue:
dump_card = queue.popleft()
sys.stdout.write(f"{dump_card} ")
# sys.stdout.write(dump_card)
# sys.stdout.write(" ")
if not queue:
break
store = queue.popleft()
queue.append(store)
<모범사례>
from collections import deque
import sys
def solution(N):
queue = deque(range(1, N + 1)) # 1부터 N까지 초기화
# 큐가 한 장 남을 때까지 반복
while len(queue) > 1:
# 버리는 카드 출력
sys.stdout.write(f"{queue.popleft()} ")
# 위에 있는 카드를 아래로 이동
queue.append(queue.popleft())
# 마지막에 남은 카드 출력
sys.stdout.write(f"{queue[0]}\n")
# 사용 예시
solution(4)
- 큰 차이는 없음
<보충 학습>
- print() 는 자동으로 개행이 들어가는 등이 보임
'문제풀이 > 일일연습문제' 카테고리의 다른 글
[스택/큐]99클럽 코테 스터디 17일차 TIL + 백준/Silver/25497. 기술 연계마스터 임스 (0) | 2024.11.14 |
---|---|
[스택/큐]99클럽 코테 스터디 15일차 TIL + 프로그래머스/1/12906. 같은 숫자는 싫어 (0) | 2024.11.12 |
[스택/큐]99클럽 코테 스터디 14일차 TIL + 백준/Bronze/10845. 큐 (0) | 2024.11.11 |
[스택/큐]99클럽 코테 스터디 13일차 TIL + 백준/Bronze/12605. 단어순서 뒤집기 (0) | 2024.11.10 |
[스택/큐]99클럽 코테 스터디 12일차 TIL + 백준/Silver/10828. 스택 (0) | 2024.11.09 |