바킹독 큐 강의 문제집에 있던 문제. 스택을 공부하고 난 후여서 큐는 어려울 것이 없었다. 문제 난이도가 낮기도 했고.
배열을 만들고 front 노드의 인덱스인 head, rear 노드의 인덱스인 tail을 저장해두고 접근한다. 주의할 점은 head나 tail이 배열 인덱스의 범위를 넘어설 수 있기 때문에, 접근에 사용할 때는 항상 배열의 크기로 나눈 나머지로 접근해야 안전하다.
n = int(input()) # 카드의 개수
q = [] # 큐
# 큐 배열의 각 원소에 1 ~ n까지의 수 넣기
for i in range(n) :
q.append(i + 1)
head = 0 # head 인덱스
tail = n # tail 인덱스
while tail - head > 1 : # 노드가 하나 남을 때까지 반복
head += 1 # 가장 위의 카드를 버린다.
q[tail % n] = q[head % n] # 가장 위의 카드를 가장 아래로 옮긴다.
tail += 1
head += 1
print(q[head % n]) # 남은 마지막 카드 출력