https://www.acmicpc.net/problem/1107

 

1107번: 리모컨

첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다.  둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼

www.acmicpc.net

풀이

방향키로만 목표값인 n에 가는것을 초깃값으로 잡아준 뒤 0~1000000까지의 숫자 중 만들 수 있는 숫자들을 완전탐색하여 최솟값이 나올 수 있게 계속 비교해준다. 0<= n <= 5000000 까지의 범위를 갖기에 최악의 경우를 대비해서 1000000까지의 숫자를 완전탐색한다.

# 1107번 리모컨
# 최소버튼 수 구하기. 숫자버튼으로 근삿값까지 도달
from collections import deque
import sys
input = sys.stdin.readline

def check(n, numbers):
    # 방향키로만 채널을 맞추는 경우
    least_cnt = abs(n - 100)
    # n의 근삿값을 찾기위해 완전탐색
    for i in range(1000000):
        for j in range(len(str(i))):
            if str(i)[j] not in numbers:
                break
            # i를 완전히 만들 수 있다면 비교해본다.
            elif j == len(str(i)) - 1:
                least_cnt = min(least_cnt, abs(n-i) + len(str(i)))
    print(least_cnt)

def solve():
    n = int(input())
    t = int(input())
    numbers = {str(i) for i in range(10)}
    # 리모컨 완성
    if t != 0:
        numbers -= set(map(str, input().split()))
    check(n, numbers)

solve()

출력결과

개발자 성현