考え方
- 「重みなし」グラフの最短経路を求める問題になる→BFS
- 桁が減る操作はないので,
10 ** 6
を超えたら打ち切ることができる
回答例
from collections import deque a, N = map(int, input().split()) q = deque() q.append(1) dist = [-1] * (10 ** 6) dist[1] = 0 while q: x = q.popleft() nxt = a * x if nxt < 10 ** 6 and dist[nxt] == -1: dist[nxt] = dist[x] + 1 q.append(nxt) if x >= 10 and x % 10: nxt = str(x) nxt = int(nxt[-1] + nxt[:-1]) if nxt < 10 ** 6 and dist[nxt] == -1: dist[nxt] = dist[x] + 1 q.append(nxt) print(dist[N])
【参考】Submission #28541490 - HHKB Programming Contest 2022(AtCoder Beginner Contest 235)