1107 리모컨

Yohan Kim·2022년 6월 21일
0

문제

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 버튼이 유효한지 유무에 관계없이 만들려고)

profile
안녕하세요 반가워요!

0개의 댓글