[백준/BOJ][Python] 11866번 요세푸스 문제 0

Eunding·2024년 3월 29일
0

algorithm

목록 보기
6/107

오늘의 회고

요즘 solved.ac 클래스 문제를 하나씩 풀고 있다. 오늘 11866번 요세푸스 문제 0을 풀면서 드디어 CLASS 2+ 달성했다!! 야호~!


시도한 것

join을 이용해서 정답을 출력하려고 하는데 자꾸 에러가 났다.

해결방법

join을 이용하려면 꼭 문자열 리스트여야 한다
'구분자'.join(문자열 리스트)

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

이 코드를

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

이렇게 고쳐주면 된다.

정답 코드

K번째 사람을 제거해야하므로 K-1번까지는 맨뒤에 원소를 다시 추가해주고
해당하는 K번째 사람은 answer 리스트에 append

+) 파이썬에서 queue는 collections 모듈의 deque으로 많이 쓴다.
queue.popleft() 큐의 맨 앞 원소 빼기
queue.append(x) x를 큐 맨 뒤에 추가하기

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

N, K = map(int, input().split())
queue = deque()
for i in range(1, N+1):
    queue.append(str(i)) # 문자열 리스트로 해야 이따 join 이용 가능

answer = []
while queue:
    for _ in range(K-1):
        queue.append(queue.popleft()) # 맨 앞 원소 빼서 맨 뒤로 추가
    answer.append(queue.popleft())

print("<"+', '.join(answer)+">")

0개의 댓글