[알고리즘] 백준 11866 : 요세푸스 문제 0 - S5

eternal moment·2023년 4월 20일
0

2023.04.20 풀이

import sys
input=sys.stdin.readline
from collections import deque

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

queue=deque()
res=[]

for i in range(1, n+1):
    queue.append(i)

while queue:
    for i in range(k-1):
        queue.append(queue.popleft())
    res.append(queue.popleft())

print('<', end="")
print(', '.join(map(str,res)), end='')
print('>')

다른 풀이

from collections import deque
n, k = map(int, input().split())
s = deque([])
for i in range(1, n + 1):
    s.append(i)
print('<', end='')
while s:
    for i in range(k - 1):
        s.append(s[0])
        s.popleft()
    print(s.popleft(), end='')
    if s:
        print(', ', end='')
print('>')

from collections import deque

queue = deque()
answer = []

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

for i in range(1, n+1):
    queue.append(i)

while queue:
    for i in range(k-1):
        queue.append(queue.popleft())
    answer.append(queue.popleft())

print("<",end='')
for i in range(len(answer)-1):
    print("%d, "%answer[i], end='')
print(answer[-1], end='')
print(">")

import sys

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

lst = [i for i in range(1, N+1)]

result = []
idx = 0
for _ in range(N):
    idx = (idx + K - 1) % (len(lst))
    result.append(lst[idx])
    lst.pop(idx)
print('<', end='')
for i in range(N-1):
    print(result[i], end=', ')
print(result[-1], end='')
print('>')

check poinnt

  • 해당 번째 수가 되기 전까지 큐에서 왼쪽부터 뺀 후 오른쪽에 다시 삽입
    해당 번째가 되면 뺀 후 print/리스트에 삽입
    큐가 빌 때까지 반복
  • 리스트 문자열로 ,랑 붙이는 법 : print(', '.join(map(str,res)))

0개의 댓글