[伯俊]1107号-リモコンPython


質問する
秀斌はテレビを見ています.秀斌はチャンネルを変えようとしたが、ボタンを強く押しすぎて、数字のボタンが壊れた.
リモコンのボタンは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
サンプル出力1
6
入力例2
100
5
0 1 2 3 4
サンプル出力2
0
入力例3
500000
8
0 2 3 4 6 7 8 9
サンプル出力3
11117
残りのサンプル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万
  • に移ったのか考えてみましょう.
  • の数字ボタンを押して、+または-を何回押すかを計算します.