백준 문제풀이/백준 Silver
BOJ 11866 - 요세푸스 문제 [Python]
LKBaekjoon
2023. 10. 29. 22:01
반응형
11866번: 요세푸스 문제 0 (acmicpc.net)
11866번: 요세푸스 문제 0
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)
www.acmicpc.net
백준 11866번 문제로, 문제 설명은 아래와 같다.
아래는 입력과 출력 예시이다.
우선 내가 사용한 사고 방식은 다음과 같다.
1. 리스트에 n개의 원소를 다 넣는다.
2. k 번째 애를 빼야 하니, 첫 index를 k-1로 놓는다.
3. 그 애를 pop하고, index 값을 k-1을 더해 다음 애를 가리키게 한다.
4. 이 때 index의 값이 list의 원소 개수를 넘어갔다면, 그 원소 개수만큼 빼줘서 다시 앞쪽으로 가게 한다.
5. 리스트 안의 n개의 값들이 모두 pop 될 때 까지 반복한다.
Queue와 같은 자료구조를 안쓰게 구현하려고 하다보니, 조금 요상하지만 잘 굴러가는 코드를 작성할 수 있었다 :)
아래는 제출한 파이썬 코드이다.
n, k = map (int,input().split())
anslist = []
for idx in range(1,n+1):
anslist.append(idx)
idx = k-1
aa = []
while len(anslist)!=1:
while idx >= len(anslist):
idx -= len(anslist)
aa.append(anslist.pop(idx))
idx += k-1
aa.append(anslist.pop())
ans = "<"
for j in range(len(aa)):
if j == len(aa)-1:
ans += str(aa[j])+">"
else:
ans += str(aa[j])+", "
print(ans)
반응형