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
반응형
'알고리즘 > 백준[baekjoon]' 카테고리의 다른 글
[baekjoon] 백준 1966번 : 프린터 큐 (by python 파이썬) (0) | 2022.04.03 |
---|---|
[baekjoon]백준 1654번 : 랜선 자르기 (by python 파이썬) 이분탐색 (0) | 2022.03.30 |
[baekjoon] 백준 10866번 : 덱 (deque) (0) | 2022.03.27 |
[baekjoon] 10828번 : 스택 (by python 파이썬) (0) | 2022.03.24 |
[baekjoon] 백준 10816번 : 숫자카드2 (by python 파이썬) (0) | 2022.03.22 |