IT/코딩

(파이썬) 백준 1158 - 요세푸스 문제 python3

new1life 2022. 8. 5. 04:36

백준 1158번

a, b = map(int,input().split())
a,b에 입력값 받기
 
c = [i for i in range(1,a+1)]
c에 리스트 만들기 1부터 a까지
 
ans=[]
ans에 출력값 넣기위함
 
n=0
초기값 0, b-1을 인덱스값으로 정해서 찾아주기
 
for i in range(a):
 
    n+=b-1
n+b-1을 해준 인덱스를 뽑아내고 있음
 
    if n>=len(c):
        n=n%len(c)
리스트의 갯수보다 크면 못꺼냄, 그럴땐 인덱스값을 초기화 해주기 위해 모자란 만큼 나머지로 계산한다.
(원형으로 둘러쌓여 있으므로, 인덱스 맨 뒤에서 다시 맨 앞으로 가기 때문)
 
    ans.append(str(c.pop(n)))
당첨된 값을 pop해서 ans에 넣어준다. str로 변환하는 것은 나중에 출력값을 <, , , ,>로 해야하기 때문이다.
 
 
print("<",", ".join(ans),">",sep='')
 
ans에 담긴 값들을 출력한다. "<" 다음에 ", "는 공백이 있다.

sep=''은 "<", ">"와 처음, 마지막 값의 공백을 없앤다.

<3, 6, 2, 7, 5, 1, 4>로 출력하라고 했기 때문이다.

저것이 없으면 < 3, 6, 2, 7, 5, 1, 4 >로 출력된다.