[백준] 1021번

그녕·2023년 3월 16일
0

알고리즘 문제 풀이

목록 보기
17/33

백준 1021번

Stack/Queue

🍀내 풀이🍀

일단 입력을 받아주고 queue에 담아줄거를 deque해서 for문으로 해준다.

빼낼 숫자들을 for문을 돌려서 빼낼 숫자와 큐에 있는 제일 왼쪽의 값이 같으면 빼줘야해서 popleft를 해준다. 만약 아니라면 왼쪽이나 오른쪽으로 이동을 해줘야한다.
queue의 개수를 반 자르게 되면 빼낼 값이 왼쪽에 있을때는 반자른 개수보다 값의 인덱스가 더 작다, 이걸 조건으로 해서 왼쪽에 있을때는 왼쪽으로 이동 popleft를 해서 append해서 제일 오른쪽에 값을 붙여준다.
하지만 오른쪽에 있을 경우에는 오른쪽으로 이동 즉 pop을 해서 appendleft를 해서 제일 왼쪽에 값을 붙여준다. 이걸 계속 돌리고 cnt는 이동할때마다 1씩 더 해준다.
그리고 cnt출력하면 끝!!

🍀내 코드🍀

from collections import deque
import sys
input = sys.stdin.readline
N,M=map(int,input().split())
data=list(map(int,input().split()))
d = deque([i for i in range(1,N+1)])

cnt=0
for i in data:
    while True:
        if d[0]==i:
            d.popleft()
            break
        else:
            if d.index(i)<len(d)/2:#왼쪽으로 이동
                while d[0] !=i:
                    d.append(d.popleft())
                    cnt+=1
            else:
                while d[0] !=i:
                    d.appendleft(d.pop())
                    cnt+=1
                    
print(cnt)

0개의 댓글