https://www.acmicpc.net/problem/14226
다이나믹 프로그래밍
그래프 이론
그래프 탐색
너비 우선 탐색
from collections import deque
n = int(input())
dist = [[-1]* (n+1) for _ in range(n+1)]
q = deque()
q.append((1,0)) # 화면 이모티콘 개수, 클립보드 이모티콘 개수
dist[1][0] = 0
while q:
s,c = q.popleft()
if dist[s][s] == -1: # 방문하지 않았으면
dist[s][s] = dist[s][c] + 1
q.append((s,s))
if s+c <= n and dist[s+c][c] == -1:
dist[s+c][c] = dist[s][c] + 1
q.append((s+c, c))
if s-1 >= 0 and dist[s-1][c] == -1:
dist[s-1][c] = dist[s][c] + 1
q.append((s-1, c))
answer = -1
for i in range(n+1):
if dist[n][i] != -1:
if answer == -1 or answer > dist[n][i]:
answer = dist[n][i]
print(answer)
걸리는 시간의 최솟값을 구한다. 즉, 최단시간을 구해야하니 BFS로 풀면 된다.
3가지 연산만 사용해서 이모티콘을 S개 만든다
즉, 화면에 이모티콘의 개수 s와 클립보드에 있는 이모티콘의 개수c를 고려해서 풀면 된다.
풀이방법 2번, 3번에 (s,s) => (s,c) 오타가 있는 것 같습니다.
덕분에 문제 잘 해결합니다. 감사합니다.