link: 리모컨
import sys
possible = [i for i in range(10)]
def valid(x):
for i in str(x):
if(possible[int(i)] == -1):
return False
return True
target = int(sys.stdin.readline())
broken = int(sys.stdin.readline())
data = []
if(broken):
data = list(map(int, sys.stdin.readline().split()))
for i in data:
possible[i] = -1
min = abs(target - 100)
for i in range(0, 2*target+10):
if(valid(i)):
tmp = abs(target-i) + len(str(i))
if(tmp<min):
min = tmp
print(min)
브루트 포스로 풀었으며,
valid는 해당 번호를 리모컨 번호를 통해서 이동할 수 있는지 판별하는 함수이다.
초기값은 + or -버튼을 눌러서 가는 값이다.
for문을 돌면서 해당번호가 리모컨으로 버튼을 눌러서 이동할 수 있으면 이동하고 +-를 눌러서 target에 도착한 값을 계산한다.
for 문을 0부터 2*target+10 까지 도는 이유는
target보다 큰 값이 더 적게 버튼을 누를 수도 있기 때문에 2를 곱했고
target이 0일 경우 for문이 돌지 않으므로 +10을 추가했다. (0-10 버튼이 유효한지 유무에 관계없이 만들려고)