[Baekjoon/Python] 1158. 요세푸스 문제

mj·2025년 6월 12일
0

코딩테스트문제

목록 보기
53/64

문제


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


풀이


🧠 접근 방법

  • 큐를 이용하여 k-1명의 사람들은 큐의 뒤로 보내고, k번째 사람은 제거한다.
  • 제거한 사람은 순서대로 리스트에 저장해둔다.
  • 이를 큐가 비어있을때까지 반복한다.
  • 최종적으로 출력규칙에 맞게 리스트를 출력하면 된다.

💻 파이썬 코드

from collections import deque

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

q = deque()
ans = []

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

while q:
    for i in range(k-1):
        a = q.popleft()
        q.append(a)

    ans.append(q.popleft())

print("<" + ', '.join(map(str, ans)) + ">")

✨ 마무리

큐(deque)를 떠올리고, 사용할수 있으면 되는 문제였다.

📚 Python 배운 내용 : join()

파이썬에서 리스트를 쉼표로 구분해서 출력하고 싶을 때는
👉 ', '.join(map(str, 리스트)) 를 사용하면 된다.

ans = [3, 6, 2, 7, 5, 1, 4]
print(', '.join(map(str, ans)))
# 출력: 3, 6, 2, 7, 5, 1, 4

join()은 문자열 리스트에만 사용할 수 있기 때문에,
숫자 리스트일 경우 map(str, 리스트)로 문자열로 먼저 변환해줘야 해요.

profile
일단 하자.

0개의 댓글