코딩 테스트(Python)/백준, 프로그래머스
1158 요세푸스 문제
5_hyun
2022. 2. 19. 23:26
반응형
https://www.acmicpc.net/problem/1158
1158번: 요세푸스 문제
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)
www.acmicpc.net
내 풀이(맞음)
n, k = map(int, input().split())
ary = []
rst = []
for i in range(n):
ary.append(i+1)
t = k -1
while(True):
if(len(rst) == n):
break
if t < len(ary):
True
else:
t %= len(ary)
a = ary[t]
del ary[t]
rst.append(a)
t += k-1
print("<", end = '')
for i in rst:
if i == rst[-1]:
print(i, end = '')
else:
print(i, end = ', ')
print('>')
t는 k보다 1작아야 리스트에서 제대로 된 위치를 찾을 수 있다. 그리고 rst가 n만큼 있을 때 까지 반복문을 돌린다. 그리고 t가 len(ary)보다 작으면 냅두고 크면 len(ary)로 나눈 나머지를 t로 한다. 그리고 k번째 값을 삭제한다. 그리고나서 t에 k-1 만큼 더하는 이유는 del을 했기때문에 이미 -1을 한거나 다름없기 때문이다.
반응형