알고리즘/백준[baekjoon]
[baekjoon]백준 11866번 : 요세푸스 문제 0 (by python 파이썬)
코딩하는이씨
2022. 3. 28. 00:41
728x90
반응형
https://www.acmicpc.net/problem/11866
11866번: 요세푸스 문제 0
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)
www.acmicpc.net
code
from collections import deque
n, k = map(int,input().split())
deq = deque()
for i in range(1,n+1):
deq.append(i)
print('<',end='')
while deq:
for i in range(k-1):
deq.append(deq[0])
deq.popleft()
print(deq.popleft(),end='')
if deq:
print(', ',end='')
print('>')
이번문제는 처음에는 큐로 해결할 생각을 하지 못하고 리스트로 해결했었다.
오답 코드는 아래와 같다.
import sys
input = sys.stdin.readline
n, k = map(int,input().split())
x = k
a = [i for i in range(1,n+1)]
y = []
print("<",end='')
while True:
if len(a) == 1:
print(a[0],end='')
break
if k != len(a)*2 and k!=len(a)*3:
if k> len(a):
k = k % len(a)
else:
k = len(a)
print(a.pop(k-1), end =', ')
k = k-1+x
print(">")
해당 코드는 컴파일러에서는 정상 작동하는데 백준에서는 틀렸다고 뜬다.
아무래도 여러 수가 대입되는 과정에서 예제의 수 말고 특정 수에서 내가 생각하지 못한 변수때문에 오류가 뜨는 것
같다.
또 여러 조건들을 생각하다 보니 코드가 복잡한면이 있다.
(정확히 왜 틀렸는지는 한번 찾아봐야겠다.)
이러한 문제를 deque를 이용하여 해결할 수 있었는데,
k번째 수를 빼고 출력할때 해당 인덱스를 찾아가는 것이 아닌 deque로 순환시켜 해당 인덱스를 맨앞으로 끌어오고,
출력후 제거하는 방식으로 하면 간단히 풀 수있다.
또한 마지막에 if문을 통해 deq속의 수가 없으면 ,를 출력하지 않게 하여 문제가 원하는 출력방식으로 구현할 수 있었다.
728x90
반응형