[Baekjoon] 2164 - 카드2 (Python)
문제
풀이
일단 문제 요약을 한 다음에 바로 구현해봤다.
- n 장의 카드. 1~n까지의 번호
- 1번 맨 위 n번 맨 아래
- 제일 위 카드 버리고 제일 위 카드를 제일 아래로.
- 1234 : 1버림 (234) - 2아래로 - 342 - 3버림 (42) - 4 아래로 24 - 2버림 - 4남음
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import sys
from collections import deque
n = int(sys.stdin.readline())
q = deque(range(1, n+1))
for _ in range(len(q)):
q.popleft()
q.append(q.popleft())
if len(q) == 1:
break
print(q[0])
- 1부터 입력받은 n까지 범위의 deque()를 만들고,
- 제일 왼쪽을 위로 생각해 왼쪽값을 popleft()로 버린 다음,
- 제일 위 값을 지워주면서 맨 아래에 append 한다.
- q에 값이 하나 남으면 break한다.
결과는 잘 나왔는데 왜 IndexError,,?
아마 for문에서 loop가 q만큼의 고정된 반복횟수로 실행되기 때문이지 않았을까 싶었다.
그래서 while문이 q의 길이가 1이 될 때 까지 loop를 반복하도록 수정하였다.
1
2
3
4
5
6
7
8
9
10
11
12
import sys
from collections import deque
n = int(sys.stdin.readline())
q = deque(range(1, n+1))
while len(q) > 1:
q.popleft()
q.append(q.popleft())
print(q[0])
정답.. IndexError 뜨면 for문 잘보고 while문도 생각해보자 메모.
Leave a comment