반응형

   문제

   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




반응형

'알고리즘(python) > 자료구조' 카테고리의 다른 글

[Python]우선순위큐 백준 11279  (0) 2020.02.01
[Python]Deque 백준 5430  (0) 2020.01.18
[Python]Deque 백준 10866  (0) 2020.01.17
[Python]Queue 백준 1966  (0) 2020.01.17
[Python]Queue 백준 11866  (0) 2020.01.16
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기