https://www.acmicpc.net/problem/1021
문제 풀이
n == 10일 때 1부터 10까지의 숫자를 담는 numbers 덱과, 뽑고 싶은 숫자들이 담긴 wants 덱이 있다고 가정하고 풀면 된다.
먼저 numbers[0] == wants[0]일 경우, 두 덱의 첫 번째 원소를 삭제해 준다.
그게 아니라면, 다시 두 가지 분기로 나누어 생각해야 한다. 뽑고 싶은 숫자가 첫 번째 인덱스와 가까운지, 아니면 마지막 인덱스와 가까운지 고려해야 한다. 만약 첫 번째 인덱스와 가까울 경우 왼쪽으로 밀어주고, 마지막 인덱스와 가까울 경우 오른쪽으로 밀어준다. 이때 절댓값 메서드를 사용했다.
왼쪽이나 오른쪽으로 미는 것은 카운트를 올려야 한다.
정답 코드
import sys
from collections import deque
input = sys.stdin.readline
def delete_first(queue):
queue.popleft()
def move_left(queue):
number = queue.popleft()
queue.append(number)
def move_right(queue):
number = queue.pop()
queue.appendleft(number)
n, m = map(int, input().split())
numbers = deque()
wants = deque(list(map(int, input().split())))
count = 0
for i in range(1, n+1):
numbers.append(i)
while wants:
if numbers[0] == wants[0]:
delete_first(numbers)
delete_first(wants)
else:
if numbers.index(wants[0]) <= abs(len(numbers) - numbers.index(wants[0]) - 1):
while numbers[0] != wants[0]:
move_left(numbers)
count += 1
else:
while numbers[0] != wants[0]:
move_right(numbers)
count += 1
print(count)
'PS > 백준' 카테고리의 다른 글
[백준] 14501번 퇴사 (python) (0) | 2024.07.07 |
---|---|
[백준] 13458번 시험 감독 (python) (0) | 2024.07.07 |
[백준] 10866번 덱 (python) (0) | 2024.07.02 |
[백준] 2164번 카드2 (python) (0) | 2024.07.02 |
[백준] 9465번 스티커 (python) (0) | 2024.05.02 |