-
[백준] 1021번 문제 (회전하는 큐) 파이썬(Python) 풀이Problem Solving/Baekjoon 2021. 9. 9. 09:34
https://www.acmicpc.net/problem/1021
from collections import deque from sys import stdin input = stdin.readline n, m = map(int, input().split()) target_nums = deque(list(map(int, input().split()))) q = deque([i for i in range(1, n + 1)]) count = 0 while len(target_nums) != 0: if target_nums[0] == q[0]: target_nums.popleft() q.popleft() else: target_index = q.index(target_nums[0]) mid = len(q) // 2 if mid < target_index: q.rotate(1) elif mid >= target_index: q.rotate(-1) count += 1 print(count)
deque의 rotate 함수를 활용하여 문제를 풀었다.
연산 횟수를 최소화하기 위해서는 뽑아야 하는 숫자가 리스트 안에서 왼쪽에 더 가까운지,
오른쪽에 더 가까운지를 확인해서 적절히 리스트를 회전시켜야한다.
그렇기 때문에 필자는 mid 라는 변수를 통해 뽑아야 하는 숫자가 왼쪽에 더 가까운지, 혹은 오른쪽에 더 가까운지 파악후, rotate로 적절히 회전시켜가며 count를 늘려갔다.
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 7569번 문제 (토마토) 파이썬(Python) 풀이 (0) 2021.09.10 [백준] 12852번 문제 (1로 만들기 2) 파이썬(Python) 풀이 (0) 2021.09.09 [백준] 16948번 문제 (데스나이트) 파이썬(Python) 풀이 (0) 2021.09.07 [백준] 16953번 문제 (A → B) 파이썬(Python) 풀이 (0) 2021.09.07 [백준] 1010번 문제 (다리 놓기) 파이썬(Python) 풀이 (0) 2021.09.07