백준 11866번: 요세푸스 문제 0

ddongseop·2021년 7월 3일
0

Problem Solving

목록 보기
11/49


✔ 풀이를 위한 아이디어

  • 원형 큐(Circular Queue)에서의 index 관리와 요소의 삭제

✔ 코드

import sys

N, K = map(int, sys.stdin.readline().split())

counter = [0]*N
current = K - 1
answer = []

while True:
    counter[current] = 1
    answer.append(current + 1)
    if len(answer) == N:
        break
    for _ in range(K):
        while True:
            current += 1
            if current >= N:
                current = current % N
            if counter[current] == 0:
                break

print("<{}".format(answer[0]), end="")
for i in range(1, N):
    print(", {}".format(answer[i]), end="")
print(">")
  • 직접 queue를 구현하지는 않고, counter라는 리스트를 통해 해당 index의 요소가 남아있는지, 남아있지 않은지 판별하였다.
  • 복잡한 while문과 for문을 사용하다보니, 시행착오가 많았다. 특히 K번만큼 삭제되지 않은 요소로 옮겨가게 하기 위해서 코드의 순서를 짜는 것이 헷갈렸다.
  • current(현재 가리키고 있는 index)가 N보다 크거나 같게 되면 N으로 나눈 나머지 값을 다시 넣어줌으로써 원형 큐처럼 기능하도록 하였다.

✔ 관련 개념

  • 원형 큐(Circular Queue)

0개의 댓글