본문 바로가기

코딩/Python

[Python] 백준 1158 요세푸스 문제

반응형

코드 작성

n, k = map(int, input().split())
arr = list(range(1,n+1))
answer = []
i = k - 1

for _ in range(n):
    if len(arr) > i:
        answer.append(arr.pop(i))
        i += k - 1
    elif len(arr) <= i:
        i = i % len(arr)
        answer.append(arr.pop(i))
        i += k -1
print("<", ', '.join(str(i) for i in answer), ">", sep = '')  #2에서 설명

코드  풀이

#1. 문제 설명

n, k = map(int, input().split())
arr = list(range(1,n+1))  #arr = [1, 2, 3, 4, 5 ... (n+1)]
ans = [ ]
i = k - 1  #i는 인덱스를 표현, 원으로 둘러싸인 배열의 첫 수를 1로 시작, i는 0부터 시작이므로 '-1'을 추가

for _ in range(n):
    if len(arr) > i: #배열의 길이가 i보다 큰 경우(i는 인덱스!)
        ans.append(arr.pop(i)) #arr의 i번째 배열을 빼고, 그 뺀 값을 ans에 다시 추가
        i += k - 1 #다시 인덱스(i)를 k만큼 증가하는데 숫자 1개를 앞전에서 뺏으므로 ‘-1’ 추가
    elif len(arr) <= i:  
        i = i % len(arr)
        ans.append(arr.pop(i))
        i += k -1
print("<", ', '.join(str(i) for i in ans), ">", sep = '')
 

#2. print문 join함수

print("<", ', '.join(str(i) for i in ans), ">", sep = '')

 

sep=''가 없을 경우 < 1, 2, 3, 4, 5 > 으로 표기됨
','.join으로 작성 할 경우 <1,2,3,4,5>으로 표기됨
''.join으로 작성할 경우 <12345>으로 표기됨

반응형

'코딩 > Python' 카테고리의 다른 글

[Python] 10807 개수 세기  (0) 2022.11.16
[Python] 1406 에디터  (0) 2022.11.16
[Python] 백준 10872 팩토리얼  (0) 2022.11.15
[Python] 백준 1789 수들의 합  (0) 2022.11.14
[Python] 백준 10866 덱  (1) 2022.11.13