728x90
반응형
문제
지민이는 N개의 원소를 포함하고 있는 양방향 순환 큐를 가지고 있다. 지민이는 이 큐에서 몇 개의 원소를 뽑아내려고 한다.
지민이는 이 큐에서 다음과 같은 3가지 연산을 수행할 수 있다.
- 첫 번째 원소를 뽑아낸다. 이 연산을 수행하면, 원래 큐의 원소가 a1, ..., ak이었던 것이 a2, ..., ak와 같이 된다.
- 왼쪽으로 한 칸 이동시킨다. 이 연산을 수행하면, a1, ..., ak가 a2, ..., ak, a1이 된다.
- 오른쪽으로 한 칸 이동시킨다. 이 연산을 수행하면, a1, ..., ak가 ak, a1, ..., ak-1이 된다.
큐에 처음에 포함되어 있던 수 N이 주어진다. 그리고 지민이가 뽑아내려고 하는 원소의 위치가 주어진다. (이 위치는 가장 처음 큐에서의 위치이다.) 이때, 그 원소를 주어진 순서대로 뽑아내는데 드는 2번, 3번 연산의 최솟값을 출력하는 프로그램을 작성하시오.
코딩
import sys
M,N=sys.stdin.readline().split()
class Cir_Deque():
def __init__(self,M,N):
self.tmp=[x for x in range(1,M+1)]
self.num=N
self.ret=self.tmp.copy()
self.cnt=0
def left_move(self):
self.tmp.append(self.tmp.pop(0))
def right_move(self):
self.tmp.insert(0,self.tmp.pop())
def pop_value(self):
self.tmp.pop(0)
def check(self,msg):
for x in msg:
idx=self.ret.index(x)
if (len(self.tmp)-idx)>idx:
while self.tmp[0]!=x:
self.left_move()
self.cnt+=1
else:
while self.tmp[0]!=x:
self.right_move()
self.cnt+=1
self.pop_value()
self.ret=self.tmp.copy()
print(self.cnt)
ret=list(map(int,sys.stdin.readline().split()))
a=Cir_Deque(int(M),int(N))
a.check(ret)
728x90
반응형
'Coding 문제 풀이' 카테고리의 다른 글
| [2747번] 피보나치 코딩 (0) | 2018.12.30 |
|---|---|
| [5430번]AC 코딩 (3) | 2018.12.19 |
| [10866번]덱(deque) 코딩 (1) | 2018.12.19 |
| [11866번]조세퍼스 문제 코딩 (2) | 2018.12.19 |
| [1966번]프린터 큐 코딩 (1) | 2018.12.19 |