목차

    Algorithm(알고리즘)/백준

    30_백준 1021번 파이썬 회전하는 큐

    고로케 2021. 6. 22.

    목차

      반응형

      큐,디큐 queue의 deque 를 사용하는 문제이다.
      deque의 명령어 및 자세한 사용법은 따로 정리하였다.

      deque 명령어 및 사용법 총정리

       

      [자료구조] 파이썬 큐(Queue), deque 사용법 총정리

      큐(Queue) : 한쪽 끝으로 자료를 넣고, 반대쪽에서는 자료를 뺄 수 있는 선형구조. 이런 자료 구조를 First In First Out 이라고 해서 FIFO 라고 부른다. 선입선출 파이썬 큐(Queue), deque 사용법! 1. deque 만들

      gorokke.tistory.com

       

       

      문제를 잘 읽고 조건을 잘 짜는게 해결의 포인트다.
      먼저 문제를 이해 해야하는데
      연산 1번 2번 3번으로 나눠져있고
      원하는 출력값은 2번 3번연산이 몇번 실행 되었는지 카운트 하여 최소 연산횟수를 출력해주면 된다.
      1번연산은 스택의 맨 왼쪽 (첫 항)이랑 원하는 숫자가 같으면 popleft()를 한다.
      2번연산은 스택의 맨 왼쪽을 popleft() 하여 .append()로 맨 뒤에 붙여준다.
      3번연산은 스택의 맨 오른쪽을 pop() 하여 .appendleft()로 맨 앞에 붙여준다.

      2번,3번 연산은 실행 될때마다 카운트하면 되는 문제.

      아래 풀이는 함수를 이용하였다.

       

      • 풀이
      from sys import stdin
      from collections import deque
      
      
      def pop_left():  # 1번 연산
          return stack.popleft()
      
      
      def move_left():  # 2번 연산
          temp = stack.popleft()
          stack.append(temp)
          return
      
      
      def move_right():  # 3번 연산
          temp = stack.pop()
          stack.appendleft(temp)
          return
      
      
      # 큐의 크기 N , 뽑아 내려고 하는 수의 개수 M
      # 뽑아내려는 숫자 num
      N, M = map(int, stdin.readline().split())
      stack = deque(range(1, N + 1))
      
      num_list = deque()
      num_list = list(map(int, stdin.readline().split()))
      
      count = 0
      for i in num_list:
          num_index = stack.index(i)
          if i == stack[0]:
              pop_left()
              continue
      
          if num_index < len(stack) / 2:
              while True:
                  if i == stack[0]:
                      pop_left()
                      break
                  move_left()
                  count += 1
      
          else:
              while True:
                  if i == stack[0]:
                      pop_left()
                      break
                  move_right()
                  count += 1
      
      print(count)

       

      30_백준 1021번 파이썬 회전하는 큐

      반응형

      댓글