https://www.acmicpc.net/problem/1107
해당 체널에 가는 경우에 수는 3가지이다.
import sys
sys.setrecursionlimit(200000)
target = input()
dbn = int(input())
if dbn>0:
dbtn = input().split()
else:
dbtn = []
answer = abs(100-int(target))
tlist = list(target)
nodbtn = []
for btn in "0123456789":
if btn not in dbtn:
nodbtn.append(btn)
def BF(now,idx,cnt):
global answer
#버튼만 눌러서 이동 가능한 경우
if now==target:
answer = min(answer,cnt)
return
#같은 자리수에서 +,ㅡ로이동
if len(now)==len(target):
tnow = int(now)
if tnow>int(target):
if '-' not in dbtn:
answer = min(answer,cnt+abs(tnow-int(target)))
else:
if '+' not in dbtn:
answer = min(answer, cnt+abs(tnow-int(target)))
#한자리큰 수에서 -로이동
if len(now)-1 == len(target):
tnow = int(now)
if '-' not in dbtn:
answer = min(answer,cnt+abs(tnow-int(target)))
return
else:
return
return
#한자리 작은 수에서 +로이동
if len(now)+1==len(target):
if now!="":
tnow = int(now)
if '+' not in dbtn:
answer = min(answer, cnt+abs(tnow-int(target)))
else:
return
for btn in nodbtn:
BF(now+btn,idx+1,cnt+1)
#print(nodbtn)
BF("",0,0)
#print("끝")
print(answer)