코딩테스트 연습/브루트 포스

[브루트 포스] 1107 리모컨

멍멍코 2024. 1. 29. 16:44

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

 

1107번: 리모컨

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

www.acmicpc.net


import sys

def can_move(channel, broken):
    for ch in str(channel):
        if ch in broken:
            return False
    return True

if __name__ == '__main__':
    # 수빈이가 이동하려고 하는 채널 N(0 <= N <= 500,000)
    N = int(sys.stdin.readline().strip())
    # 고장난 버튼의 개수 M (0 <= M <= 10)
    M = int(sys.stdin.readline().strip())
    broken = set(sys.stdin.readline().split()) if M > 0 else set()

    # +와 -버튼만을 사용하는 경우
    min_count = abs(N - 100)

    # 모든 채널을 순회하며 누를 수 있는지 검사
    # 채널이 무한대로 존재하지만, 실제로 고려해야 할 채널 범위는 제한적임
    for channel in range(1000000):
        if can_move(channel, broken):
            min_count = min(min_count, len(str(channel)) + abs(channel - N))

    print(min_count)