考えて競プロする

プログラミングコンテストの問題をどう考えて解いたかを記録していくブログです。使用言語はPython3

ABC013-B - 錠 を解く

ABC013-B - 錠

 

押すと数字が1増える赤いボタンと

押すと数字が1減る青いボタン

数字aを数字bにするためにはそれぞれ何回押すか、という問題

 

なんだ、|a-b| で楽勝だな!

 

…いや、何か補足があるぞ

 

> 9 のときに赤いボタンを押すと 0 になり、ディスプレイの表示が 0 のときに青いボタンを押すと 9 になります。

 

…なるほど

これを踏まえると |a-b| が最適とは限らないな…

 

例えば、a=9, b=3 の場合、|a-b|=6 だが

正解は 9 → 0 → 1 → 2 → 3 の計4回が正解になる

 

これって 9 → 10 →11 →12 →13 と考えると 9 → 3 は 9 → 13 に実質等しいとわかる

これなら 13-9=4(10+3-9=4) で答えが求められる

 

以上を踏まえると

|a-b| と (10+a)-b と (10+b)-a のうち一番小さいものを出力すればよさそうだ

 

提出したコード

# 入力
a=int(input())
b=int(input())

# 出力
print(min(abs(a-b),10+a-b,10+b-a))
 
abs 関数は絶対値を返す関数
面倒なので min 関数 に3つの数値を全部突っ込んでそのまま出力してみた

 

提出結果はAC
お疲れ様でした!