[백준] 11866번 : 요세푸스 문제 0

letsbebrave·2022년 3월 17일
0

codingtest

목록 보기
50/146

문제

참고 블로그

https://velog.io/@mynote/%EB%B0%B1%EC%A4%80-1158-%EC%9A%94%EC%84%B8%ED%91%B8%EC%8A%A4-%EB%AC%B8%EC%A0%9C

풀이

N, K = map(int, input().split())
queue = list(range(1,N+1))

tmp = [] # 팝한 원소 넣을 리스트
idx = K - 1 # 순차적으로 도는 인덱스

# 빌 때까지 반복
while queue:
    if idx >= len(queue):
        idx %= len(queue) # 인덱스가 넘어가면 나머지로 바꿔줌
    else: # 인덱스가 범위 내이면 해당 원소 꺼내서 넣고 인덱스 다시 올림
        tmp.append(str(queue.pop(idx)))
        idx += K - 1

result = f'<{", ".join(tmp)}>'

print(result)
        

22.04.13 다시 풀어보기

import sys

N, K = map(int, sys.stdin.readline().split())
que = list(range(1, N+1))
idx = K - 1 # pop 되면 원소의 인덱스가 하나씩 줄어들어서 K - 1을 더해줘야지 그 다음에 제대로 지워줄 수 있음
tmp = [] # 팝한 원소를 넣을 배열

while que :
    if idx >= len(que):
        idx %= len(que)
        # len(que)를 초과했으므로 idx를 큐의 길이로 나눠야 그 다음에 나머지 인덱스가 들어갈 수 있음

    tmp.append(str(que.pop(idx)))
    idx += K - 1

result = f'<{", ".join(tmp)}>'
print(result)
profile
그게, 할 수 있다고 믿어야 해

0개의 댓글