알고리즘/백준 문제풀이

[백준] 1158번 : 요세푸스 문제 (python 파이썬)

매일_공부 2022. 3. 12. 15:40
반응형

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

 

1158번: 요세푸스 문제

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)

www.acmicpc.net

문제 정리 : N명이서 원으로 둘러 앉을 때, K번째 순서마다 걸려 빠지는 번호를 출력

 

import sys


s = "<" # 정답 선언
end, a = map(int,sys.stdin.readline().split(" ")) # 범위와 단위 입력
l =[i for i in range(1,end+1)] # 1~ N 까지

key = 0 # 단위를 확인하기 위한 변수

while True:
    l1 = [] # 새로운 스택 선언
     
    for i in l: # l의 요소만큼
        key = key +1 # key 1씩 증가
        if key == a: # key 가 단위와 같아질 경우
            key = 0 # key 초기화
            s = s+str(i)+", " # 정답에 추가
        else: #key가 단위보다 작을 경우
            l1.append(i) #새로운 스택에 넣기
    if len(l1) == 0: # 탈출 조건
        break
    l = l1 # l을 새로운 스택으로 바꾸기
print(s[:-2]+">")

새로운 스택을 만듬으로서 기존의 입력값에서 인덱스로 제거하는 것보다

append만을 사용하게 됨으로서 시간절약 가능

또한 이 방법을 사용하면, 사라진 값은 새로운 스택에서 없어지므로 고려할 필요가 없어지게 된다.

 

반응형