이번 문제는 단순한 완전 탐색을 통해 해결할 수 있었다. 이동하고자 하는 채널의 최대 크기가 500,000이므로 9밖에 사용할 수 없는 경우, 즉 999,999부터 시작해야 되는 경우가 있으므로 1,000,000에 대하여 순회해야 한다. 순회해가며 그때마다 해당 숫자를 문자열로 변환하여 하나 하나씩 확인하고, 만약 고장난 버튼이 있을 경우 다음 반복으로 넘어가도록 하였고, 고장난 버튼이 없을 경우에는 가능한 최대값으로 저장해둔 answer를 현재 숫자의 자릿수와 현재 숫자-목표 숫자의 합과 answer 자기 자신 중 더 작은 값으로 갱신하도록 한다. 순회를 모두 마치게 되면 answer를 구할 수 있다. 이 문제에서는 예외처리가 필요했다. m이 0일 경우 고장난 버튼에 대한 입력이 주어지지 않기 때문에 이에 대하여 예외처리를 진행해주어야 한다.
num[i]
의 정수형이 broken에 존재할 경우, 반복을 탈출한다.abs(int(num)-n)+len(num)
중 더 작은 값으로 갱신한다.n=int(input())
m=int(input())
if m:
broken=list(map(int, input().split()))
else:
broken=[]
answer=abs(n-100)
for num in range(1000001):
num=str(num)
for i in range(len(num)):
if int(num[i]) in broken:
break
elif i==len(num)-1:
answer=min(answer, abs(int(num)-n)+len(num))
print(answer)