알고리즘(python)/자료구조

[Python]Deque 백준 1021

개발일기 2020. 1. 17. 23:50
반응형

   문제

   https://www.acmicpc.net/problem/1021



원하는 숫자가 제일 앞으로 올때까지 회전횟수를 저장하고 원하는 숫자가 제일앞으로오

면 인자를 제거하는 방식이다.이때 회전횟수는 최소화 시켜야한다. 배열의 절반위치보다

 뒤에있다면 오른쪽으로 회전시켜야하고 그렇지 않다면 왼쪽으로 회전시켜주면된다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from _collections import deque
import sys
 
mydeque=deque()
N,M=map(int,sys.stdin.readline().split())
location=list(map(int,sys.stdin.readline().split()))
 
 
for i in range(1,N+1):
    mydeque.append(i)
 
count=0
location_len=N
for i in range(M):
    index = -1#첫인자라면 0이 나올수 있도록
    for j in range(len(mydeque)):
        index += 1
        if mydeque[j]==location[i]:
            break
 
    if index>len(mydeque)//2:#절반보다 뒤에 있다면오른쪽회전
        for k in range(len(mydeque)-index):
            mydeque.appendleft(mydeque.pop())
            count+=1
    else:
        for k in range(index):#절반보다 앞에 있다면 왼쪽회전
            mydeque.append(mydeque.popleft())
            count+=1
    mydeque.popleft()
 
 
 
print(count)

cs




반응형