백준 1021[회전하는 큐]

Ju_Nik_e·2023년 5월 29일
0

baekjoon

목록 보기
14/16
post-thumbnail

어려웠던 점

문제를 이해하는 것 자체가 어려웠다... 2번 예제에 대한 출력값을 하나씩 대입해가면서 풀어냈다.

1. 문제 분석 및 접근법

  1. 원소를 뽑는 건 해당 원소가 맨 앞에 있을 때만 가능
  2. 해당 원소가 맨 앞이 아닐 경우, 리스트 전체를 앞이나 뒤로 회전시킨다.
  3. 회전시킨 횟수를 출력한다.

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 오른쪽 회전
                카운트 증가

3. 코드 구현

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)

0개의 댓글