Atcoder 灰diff埋め AGC002~AGC024 振り返り
AGC021 A - Digit Sum 2【AC】
N 以下の正の整数の10進法での各桁の和の最大値を求める問題でした.0からN順に各桁の和を求めていって最大値を出す方法では,N<10^16であるため間に合いません.
総和の最大値なので,単純に考えると沢山9がある数字が最大値のように思います.実際にこれは正しく,例えばN=555なら,499が最大になります.これは各桁を9に変換し,N以下である必要があるため1桁目を-1する操作と言えます.555なら1桁目の5を4にし,それ以外の5を9に変換してます.
これでACかと思いきや例外がありWAです.N=5などNが1桁だった場合です.この方法だとN=4となってしまいます.よってNの各桁の総和と上記処理をした総和の大きい方を出力すればACになります.
N = list(map(int, list(input()))) print(max(N[0]-1 + 9*(len(N)-1), sum(N)))