https://www.acmicpc.net/problem/14226

문제는 이해됐지만 아이디어를 떠올리는 게 어려웠다.
모든 경우의 수를 담기 위해 리스트는 1001*1001로 만들어주고
다음 세가지 동작을 반복한다.
import sys
from collections import deque
input = sys.stdin.readline
s = int(input())
graph = [[0]*1001 for _ in range(1001)]
queue = deque([(1, 0)]) # 초기값 (screen, clipboard)
answer = 0
while queue:
    screen, clip = queue.popleft()
    if screen == s:  # 화면에 있는 임티 개수랑 같아지면
        answer = graph[screen][clip]
        break
    arr = [[screen, screen], [screen+clip, clip], [screen-1, clip]] # 전체 복사, 붙여넣기, 하나 지우기
    for temp_screen, temp_clip in arr:
        if 0 <= temp_screen <= 1000 and 0 <= temp_clip <= 1000 and not graph[temp_screen][temp_clip]:
            graph[temp_screen][temp_clip] = graph[screen][clip]+1
            queue.append((temp_screen, temp_clip))
print(answer)