똥그래미 코딩공장
백준 1021(회전하는큐) 파이썬 본문
https://www.acmicpc.net/problem/1021
1021번: 회전하는 큐
첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가
www.acmicpc.net
이 문제는 어이없는 실수로 인해 며칠을 끌었다....이 문제는 큐,덱 문제로 덱을 써서 풀었다. 풀다가 attributeerror: 'list' object has no attribute 'popleft'이런 오류가 떠서 무엇이 문제인지 찾아봤는데 리스트를 덱에 맞게 바꿔줘야했다. 그래서 d=deque(b) 라는 문장을 넣어 덱을 만들었더니 오류가 해결이 되었다. 이것만 해결하면 밑에 for문 및 if 문은 어려운 식이 아니기에 금방 풀 수 있었다.
import math
import sys
from collections import deque
N,M = map(int,sys.stdin.readline().split())
a = list(map(int, sys.stdin.readline().split()))
b = []
for i in range(1,N+1):
b.append(i)
d =deque(b)
cnt=0
for k in range (M):
locate = d.index(a[k])
if (locate == 0):
d.popleft()
elif (locate<math.ceil((len(d)/2))):
d.rotate(-(locate))
cnt+=locate
d.popleft()
elif (locate>=math.ceil((len(d)/2))):
d.rotate(len(d)-locate)
cnt+=len(d)-locate
d.popleft()
print(cnt)
이 문제의 키포인트는 rotate() 함수를 사용하여 횟수를 cnt에 저장하여 출력 하는것이다. 또한 입력을 input()이 아닌 sys.stdin.readline()으로 풀어야 시간초과가 안뜬다.
'Algorithm' 카테고리의 다른 글
| 백준 1003번(피보나치 함수) 파이썬 (0) | 2022.04.02 |
|---|---|
| 백준 2839 (설탕배달) 파이썬 (0) | 2022.04.02 |
| 백준 11866번(요세푸스 문제0) 파이썬 (0) | 2022.02.16 |
| 백준 2164번(카드2) 파이썬 (0) | 2022.02.15 |
| 백준 11399번(ATM) 파이썬 (0) | 2022.02.13 |