[백준 BOJ_1107] 리모컨 Python 풀이

출처: 백준 온라인 저지

문제

image image

풀이

완전탐색으로 풀어주었습니다.

우선 result를 100에서 N까지의 거리(+던지 -던지 숫자 버튼을 쓰지 않고 채널 변경하는 경우)로 초기화 해주었습니다. 고장난 버튼이 없다면, 숫자 버튼을 눌러서 변경하는 것과 위의 경우 중 최소값을 저장해줍니다.

고장난 버튼이 있을 경우에는 고장난 버튼을 포함하는 모든 채널을 돌아가며,
그 채널로 바꾸는 데 누르는 버튼의 수(len(str(ch)))와 그 채널과 N까지의 거리(abs(N-ch))를 더한 값을
현재 result와 비교해 더 작은 값으로 저장해주며 찾았습니다.

코드

N = int(input())
M = int(input())

result = abs(100 - N)

if M == 0:
    result = min(result, len(str(N)))
else:
    broken = list(map(int, input().split()))
    # 상한을 500,001으로 두었을때는 아래의 예제를 통과하지 못함
    # 500000
    # 9
    # 0 1 2 3 4 6 7 8 9
    # 예상 출력: 55561 (555,555에서 55,555번 -)
    # 상한 500001의 출력: 444450 (55,555에서 444,445번 +)
    for ch in range(1000000):
        for c in str(ch):
            if int(c) in broken:
                break
        else:
            result = min(result, abs(N-ch)+len(str(ch)))
print(result)

Leave a comment