반응형
1021번: 회전하는 큐
첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가
www.acmicpc.net
파이썬 코드
from collections import deque
n, m = map(int, input().split())
deq = deque(i+1 for i in range(n))
li = list(map(int, input().split()))
sum = 0
for i in range(m):
diff = deq.index(li[0])
diff_rev = len(deq) - diff
if diff == 0:
li.pop(0)
deq.popleft()
elif diff < diff_rev:
deq.rotate(-diff)
sum += diff
li.pop(0)
deq.popleft()
else:
deq.rotate(diff_rev)
sum += diff_rev
li.pop(0)
deq.popleft()
print(sum)
뽑아야 하는 값의 인덱스를 diff로, 전체 deque의 길이에서 diff를 뺀 값을 diff_rev로 놓았습니다.
diff가 0이면 뽑아야 하는 수가 가장 앞에 있다는 의미이므로 리스트와 deque에서 각각 값을 꺼냅니다.
diff 보다 diff_rev가 더 크면 deque를 오른쪽 방향으로 diff_rev 만큼 rotate 시킨 후 값을 꺼냅니다.
반대는 반대로 합니다.
반응형
'Programming > Coding Test' 카테고리의 다른 글
백준 4949 - deque를 이용해서 스택 문제풀기 (0) | 2021.01.12 |
---|---|
백준 5430 - 줄바꿈없이 print, split(), indexing, replace(), join (0) | 2021.01.12 |
백준 1002 - 원의 성질을 이용한 문제 (0) | 2021.01.12 |
백준 4153 - 피타고라스를 이용한 단순 수학 문제 (0) | 2021.01.11 |
백준 13305 - 파이썬으로 그리디 알고리즘 (0) | 2021.01.11 |