ABC099 C - Strange Bank
備忘録
問題
回答
import sys import os def main(): if os.getenv("LOCAL"): sys.stdin = open("input.txt", "r") N = int(sys.stdin.readline().rstrip()) ret = N for n in range(N+1): cnt = 0 i = n while (i > 0): cnt += i % 6 i //= 6 j = N - n while (j > 0): cnt += j % 9 j //= 9 ret = min(cnt, ret) print(ret) if __name__ == '__main__': main()
考え方
あまり理解できていない。。
整数N
を1
から順に、6
の累乗で引き出せるか否か探索し、
残りを9
の累乗で引き出せるか否かを探索している?
while (i > 0): cnt += i % 6 i //= 6
上記箇所は
cnt += i % 6
が6
の余剰なので、1
円を何回使用するか、
i //= 6
が6
の商(切り下げ)なので、6
の累乗についての算出
while
でループすることで、先に1
円使用分を抜き出し、
商(切り下げ)で6
の累乗の最小回数を算出している?
後半の9
についても同様の処理