코딩테스트 대비/BOJ

[Baekjoon/Python] 1107번: 리모컨 - 효과는 굉장했다!

bluetag_boy 2022. 3. 2. 15:45
반응형
 

1107번: 리모컨

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

www.acmicpc.net

 

알고리즘 분류

  • 브루트포스 알고리즘

 

 

SOLUTION

import sys

N = int(sys.stdin.readline())
M = int(sys.stdin.readline())

if M: # 고장난 버튼이 있을때
    broken_buttons = sys.stdin.readline().rstrip().split()

else:
    broken_buttons = []

# +/- 버튼만 눌러서 움직일 경우
cnt = abs(100 - N)

# N의 최댓값이 500,000 이므로 최대 1,000,000 번의 채널까지 탐색해줘야 한다
# WHY? 500,000 이상의 채널에서 목표값으로 갈 때의 경우의 수가 더 작을 수 있기 때문이다.
for channel in range(1000001):
    for i in str(channel):
        # 고장난 버튼이 있으면 입력을 하지못하므로 통과
        if i in broken_buttons:
            break

    # 버튼이 고장나지 않았다면 그 채널로 움직인 후 +/-를 통해 움직이는게 더 최소이므로 갱신
    else:
        cnt = min(cnt, len(str(channel)) + abs(channel - N))

print(cnt)