[伯俊]1107号-リモコンPython
7692 ワード
質問する
秀斌はテレビを見ています.秀斌はチャンネルを変えようとしたが、ボタンを強く押しすぎて、数字のボタンが壊れた.
リモコンのボタンは0から9まで数字+と-があります.クリックすると、現在表示されているチャンネルから+1チャンネルに移動し、-をクリックして-1チャンネルに移動します.チャンネル0で-を押すと、チャンネルはそのままで、チャンネルは無限大になります.
スビンが今移動するチャンネルはNです.ボタンに障害が発生した場合は、Nチャンネルに移動するには何回ボタンを押す必要があるかを尋ねるプログラムを作成します.
秀彬が今見ているチャンネルは100番です.
入力
第1行は、スビンが移動するチャンネルN(0≦N≦500000)を与える.2行目には、障害ボタンの個数M(0≦M≦10)が与えられる.障害が発生したボタンがある場合は、3行目に障害が発生したボタンが表示され、同じボタンは複数回表示されません.
しゅつりょく
チャネルNに移動するには、最初の行の出力で少なくとも何回ボタンを押す必要がありますか.
入力例1
に答える
なぜ10万に移ったのか考えてみましょう. の数字ボタンを押して、+または-を何回押すかを計算します.
秀斌はテレビを見ています.秀斌はチャンネルを変えようとしたが、ボタンを強く押しすぎて、数字のボタンが壊れた.
リモコンのボタンは0から9まで数字+と-があります.クリックすると、現在表示されているチャンネルから+1チャンネルに移動し、-をクリックして-1チャンネルに移動します.チャンネル0で-を押すと、チャンネルはそのままで、チャンネルは無限大になります.
スビンが今移動するチャンネルはNです.ボタンに障害が発生した場合は、Nチャンネルに移動するには何回ボタンを押す必要があるかを尋ねるプログラムを作成します.
秀彬が今見ているチャンネルは100番です.
入力
第1行は、スビンが移動するチャンネルN(0≦N≦500000)を与える.2行目には、障害ボタンの個数M(0≦M≦10)が与えられる.障害が発生したボタンがある場合は、3行目に障害が発生したボタンが表示され、同じボタンは複数回表示されません.
しゅつりょく
チャネルNに移動するには、最初の行の出力で少なくとも何回ボタンを押す必要がありますか.
入力例1
5457
3
6 7 8
サンプル出力16
入力例2100
5
0 1 2 3 4
サンプル出力20
入力例3500000
8
0 2 3 4 6 7 8 9
サンプル出力311117
残りのサンプルI/Oをスキップに答える
n = int(input())
m = int(input())
# 숫자 버튼이 고장났는지 않났는지 체크
broken = [False] * 10
if m > 0:
a = list(map(int,input().split()))
else:
a = []
for x in a:
broken[x] = True
# 채널 c로 이동이 가능하면 c에 숫자의 개수
# 이동 불가능이면 0 리턴
def possible(c):
if c == 0:
if broken[0]:
return 0
else:
return 1
l = 0
while c > 0:
if broken[c%10]:
return 0
l += 1
c //= 10
return l
# 정답의 초기값 설정 -> 숫자 버튼을 누리지 않는 경우
ans = abs(n-100)
# 이동할 채널을 정한다.
for i in range(0, 1000000+1):
c = i
# 이동할 채널에 포함되어 있는 숫자 중에 고장난 버튼이 있는지 확인한다.
l = possible(c) # 숫자의 개수
# 고장난 버튼이 포함되어 있지 않다면 |C-N|을 계산해 +나 - 버튼을 몇 번 눌러야 하는지 계산한다.
if l > 0:
press = abs(c-n)
if ans > l + press:
ans = l + press
print(ans)
整理するなぜ10万
Reference
この問題について([伯俊]1107号-リモコンPython), 我々は、より多くの情報をここで見つけました https://velog.io/@tunaman95/백준-1107번-리모컨-Pythonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol