1158번 : 요세푸스 문제 - Python

FriOct·2023년 1월 30일
0

PS

목록 보기
31/108

문제

https://www.acmicpc.net/problem/1158

풀이

k번째 수를 pop하여 제거하면서 array에 저장한 후 array를 출력한다.

코드

from sys import stdin

input = stdin.readline

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

a = [i+1 for i in range(n)]
array = list()

cnt = 0


for i in range(n):
    cnt = (cnt + k - 1)%len(a) #cnt가 a의 크기를 넘어서지 않도록 계산

    array.append(str(a.pop(cnt))) #cnt번째 수를 재거하면서 array에 저장

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

다른 풀이

queue를 이용하여 k번째 까지 pop하고 pop한 값을 다시 push한다. 그리고 가장 앞에 있는 수를 pop하면서 array에 저장한다.

다른 코드

from sys import stdin
from collections import deque

input = stdin.readline

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

queue = deque()
array = list()

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

for i in range(n):

    for j in range(k-1): #k-1번 수를 돌린다.
        queue.append(queue.popleft())
    
    array.append(str(queue.popleft()))

print("<",", ".join(array),">",sep='')
profile
꿈 많은 개발자

0개의 댓글