Stay Hungry Stay Foolish

BOJ 코딩테스트/Silver

[BOJ] 2161. 카드1 (Python/자료구조/Silver 5)

dev스카이 2024. 10. 29. 12:55

[문제 링크] 👉 https://www.acmicpc.net/problem/2161


풀이

큐 생성 방법

from collections import deque
queue = deque()
  • collections의 덱 라이브러리를 import 한다.
  • deque() 를 선언하면 양방향 큐인 덱이 생성된다.

 

첫 번째 원소를 빼내는 방법

queue.popleft()
  • popleft() 는 왼쪽의 첫 번째 원소를 큐에서 빼고 출력한다.
  • pop() 은 오른쪽의 첫 번째 원소를 큐에서 빼고 출력한다.

 

제일 아래에 있는 카드를 밑으로 옮기는 방법

queue.rotate(-1)
  • rotate() 는 큐를 왼쪽 혹은 오른쪽으로 회전시키는 함수이다.
  • 인자로 얼만큼 이동시킬지 넘기면 되는데, 이때 그 수가 음수이면 왼쪽으로, 양수이면 오른쪽으로 회전한다.

 

★ rotate() 예시

from collections import deque

num = [1, 2, 3, 4, 5]
queue = deque(num)

 

 

1️⃣ 왼쪽으로 1만큼 회전

queue.rotate(-1)
print(*queue)  # unpack

 

결과

2 3 4 5 1
  • 왼쪽으로 1만큼 회전시킨 결과, 맨 앞에 있던 1이 맨 뒤로 이동한 걸 볼 수 있다.

 

2️⃣ 왼쪽으로 3만큼 회전

queue.rotate(-3)
print(*queue)  # unpack

 

결과

4 5 1 2 3
  • 왼쪽으로 3만큼 회전시킨 결과, 1, 2, 3 이 차례로 왼쪽으로 이동한 걸 볼 수 있다.

 

3️⃣ 오른쪽으로 1만큼 회전

queue.rotate(1)
print(*queue)  # unpack

 

결과

5 1 2 3 4
  • 오른쪽으로 1만큼 회전시킨 결과, 맨 뒤에 있던 5가 첫 번째로 이동했고 나머지 수들이 오른쪽으로 모두 이동한 걸 볼 수 있다.

 

Solution

from collections import deque

n = int(input())
card_deq = deque(range(1, n + 1))  # n 만큼 큐에 넣기
result = []
while card_deq:
    result.append(card_deq.popleft())
    card_deq.rotate(-1)
print(*result)

 

 

 

👩‍💻 회고

덱의 rotate() 를 이용해서 쉽게 풀 수 있었다.