[BOJ] 11866번: 요세푸스 문제 0 (python)

한서영·2023년 6월 5일
0

BOJ

목록 보기
13/15

문제 링크 : https://www.acmicpc.net/problem/11866

💡 해결 방법

  • 인덱스와 배열에 원소가 제거됐을 때 뒤에 요소들 앞으로 한 칸씩 당겨지는 것 생각해서 point가 건너뛰는 범위를 k-1로 지정
  • point가 len(circle)을 넘어가면 안되므로 중간에 while문으로 point 변경해줌
  • 제거할 요소의 인덱스에 도달하면 result에 추가하고 circle에서는 remove

  • deque 사용하면, k만큼 반복해서 pop하고 그걸 다시 뒤에 추가해준다. 그리고 맨 앞의 요소를 print한다. 이 과정을 deque가 비었을 때 break하면 더 간단하게 해결 가능

🖥️ 코드

import sys

N, K = map(int, sys.stdin.readline().split())
circle = []
result = []
for i in range(1, N+1, 1):
    circle.append(i)

point = 0
while circle:
    point += K-1
    while point >= len(circle):
        point -= len(circle)
    
    result.append(circle[point])
    circle.remove(circle[point])

print("<", end="")
for i in range(len(result)):
    if i == len(result)-1:
        print(result[i], end="")
    else:
        print(result[i], end=", ")
print(">")

🖥️ 정답코드

import sys
from collections import deque
n, k = map(int, sys.stdin.readline().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('>')

✏️ 알고리즘 분류

  • 구현
  • 자료구조

0개의 댓글