[백준 2164] 카드2 (Python)

hhkim·2022년 8월 29일
0

algorithm - python

목록 보기
6/10
post-thumbnail

바킹독 큐 강의 문제집에 있던 문제. 스택을 공부하고 난 후여서 큐는 어려울 것이 없었다. 문제 난이도가 낮기도 했고.

배열을 만들고 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])	# 남은 마지막 카드 출력

0개의 댓글