[BOJ] 1158 요세푸스 문제

[BOJ] 1158 요세푸스 문제

문제 링크

자료구조 큐를 익히기 위한 문제 원형이라는 컨셉을 유지하기 위해서 k번째가 아닌 수는 다시 queuedp 넣고 k번째마다 result에 append하는 방식으로 풀이했다.

풀이는 단순한듯 하지만 메모리, 시간 둘다 별로인 코드를 작성해버렸다.

다른 풀이들을 살펴보니 굳이 deque를 사용하지 않고 풀이하니까 시간 관리가 잘 되었다.

나의 풀이

from collections import deque

n, k = map(int, input().split())

queue = deque(range(1, n+1))
result = []

count = 1

while len(queue):
  if count == k:
    count = 1
    result.append(queue.popleft())
  else:
    queue.append(queue.popleft())
    count += 1

print(f"<{', '.join(map(str, result))}>")

다른 풀이

# 요세푸스 문제
# 실버4

N, K = map(int, input().split())
lists = [i + 1 for i in range(N)]

answer = []
count = 0

for _ in range(N):
    count += K - 1
    if len(lists) <= count:
        count %= len(lists)

    answer.append(str(lists.pop(count)))

print("<", ", ".join(answer), ">", sep='')

© 2021. All rights reserved.