한 걸음씩

[백준][python] 2161 카드1 ✅ 본문

BOJ

[백준][python] 2161 카드1 ✅

winter17 2023. 1. 27. 00:26

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

 

2161번: 카드1

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가

www.acmicpc.net

풀이 과정

1. collection 모듈의 deque 자료형을 사용하면 시간이 단축됨 (리스트 회전문제에 적합)

2. 정수 n을 입력받고

3. deque 자료형으로 range(1, n + 1)을 해준 다음 변수 queue에 저장 queue = deque([1, 2, 3, 4, 5, 6, 7])

4. 예제 입력뿐만 아니라 edge case를 생각해 보면 몇 번이나 반복해야 할지 모르기 때문에 while

5. while 문에서 queue의 길이가 1보다 크다면 while len(queue) > 1: 

6.. popleft() 함수를 사용해서 가장 오른쪽 요소를 빼서 출력하고, end함수는 추가적으로 출력될 요소들을 공백으로 구분하여 한 줄에 출력하기 위함 print(queue.popleft(), end=" ")  => 1

7. 그 다음 남아있는 queue 리스트에서 한 번 더. popleft()한 뒤 append 해주면 리스트 처음에 있던 요소가 맨뒤에 위치한다 queue.append(queue.popleft()) => queue = deque([3, 4, 5, 6, 7, 2])

8. 6번과 7번을 5번의 조건이 true일 때까지 반복하다 보면 queue에 하나의 원소가 남는데 그때 while문 밖에서 queue의 가장 첫 번째 요소를 인덱스 해서 출력한다 print(queue [0]) 

from collections import deque
n = int(input())
queue = deque(range(1, n + 1))
# print(queue) => deque([1, 2, 3, 4, 5, 6, 7])
while len(queue) > 1:
    print(queue.popleft(), end=" ")
    queue.append(queue.popleft())
print(queue[0])

리뷰

수업 시간 때 queue 푸는 방법을 배웠는데 다시 풀려고 하니까 못 풀었다... 

pop을 하면 원래 리스트에서 pop 된 요소가 삭제되는데 그런 개념이 아직 덜 이해된 것 같다

만약에 pop 하고 append 하면 삭제된 요소를 맨뒤에 추가해 주는 것! 

 

다른 방법으로도 풀 수 있는데 이건 곧 업로드 해야지

'BOJ' 카테고리의 다른 글

[백준][python] 1181 단어정렬  (0) 2023.01.27
[백준][python] 1269 대칭 차집합  (0) 2023.01.27
[백준][python] 10773 제로  (0) 2023.01.26
[백준][python] 9012 괄호 ✅  (0) 2023.01.26
[백준][python] 1453 피시방 알바  (0) 2023.01.26