알고리즘/백준
[python3] 11866 요세푸스 문제 0
Garonguri
2021. 10. 4. 21:27
728x90

https://www.acmicpc.net/problem/11866
11866번: 요세푸스 문제 0
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)
www.acmicpc.net
[ 맨 처음 생각한 풀이 ]
1부터 입력 받은 N까지 존재하는 리스트의 0번째 원소와 -1번째 원소가 맞닿아 있는 원 모양의 구조를 생각했다.
현재 위치를 저장한후 그 위치를 기준으로 다음 K번째 요소가 어디에 있는지를 계산하면 된다.
그리고, 특정 위치의 원소를 제거해야 하므로 pop()을 사용하면 되겠다고 생각했다.
K번째 요소가 리스트의 크기를 넘어가는 경우, 원 모양의 특성상 0번부터 시작하게 되는데, 이것은 원소의 전체 길이와 현재 위치를 나눈 나머지를 이용해 계산할 수 있다.
결과는 <a, b, c, d, ... , f> 식으로 출력되어야 하는데. < a, b, c, d, ..., f > 로 출력했더니 틀렸습니다가 계속 떠서 고생 좀 했다...
겨우 이것 때문에... < a, b, c, d, ..., f > ----> " " 이 부분 때문에 ....ㅋㅋㅋㅋ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from sys import stdin | |
N, K = map(int, stdin.readline().split()) | |
yo = list(i for i in range(1, N+1)) | |
result = [] | |
now = 0 #now : 현재 위치를 나타냄 | |
while len(yo) >1 : | |
now += K | |
if now > len(yo): | |
now = now % len(yo) | |
if now ==0: | |
now = now + len(yo) | |
now -= 1 | |
result.append(yo.pop(now)) | |
print("<", end = "") | |
for i in range(len(result)): | |
print(result[i], end = ", ") | |
print(yo.pop(), end = "") | |
print(">") |
다른 분들은 Queue를 이용해서 푼 것 같던데, 고백하자면 큐 구조의 사용이 대놓고 문제에 주어지지 않는 한.. 익숙치 않은 것 같다.
음... 파이팅~~!!
728x90