문제를 이해하는 것 자체가 어려웠다... 2번 예제에 대한 출력값을 하나씩 대입해가면서 풀어냈다.
- 원소를 뽑는 건 해당 원소가 맨 앞에 있을 때만 가능
- 해당 원소가 맨 앞이 아닐 경우, 리스트 전체를 앞이나 뒤로 회전시킨다.
- 회전시킨 횟수를 출력한다.
n, m 입력받기
리스트(position) 입력받기(split으로)
덱 생성(result) -> 1~n까지를 원소로 가짐
카운트할 변수(cnt) 생성 (초기값 0)
for -> 입력받은 리스트 하나씩 비교:
if result 맨 앞 == 찾는 값(position[i]):
result 맨 앞 제거
else:
while result[0] != position[i]:
if position[i]의 인덱스 번호 < result길이/2:
result 왼쪽 회전
카운트 증가
else:
result 오른쪽 회전
카운트 증가
import sys
from collections import deque
input = sys.stdin.readline
n, m = map(int, input().split())
position = list(map(int, input().split()))
result = deque()
cnt = 0
for i in range(1, n+1):
result.append(i)
for i in range(len(position)):
while True:
if result[0] == position[i]:
result.popleft()
break
else:
while result[0] != position[i]:
if result.index(position[i]) < len(result)/2:
result.append(result.popleft())
cnt += 1
else:
result.appendleft(result.pop())
cnt += 1
print(cnt)