Home (Python)[백준][브루트포스] 리모컨
Post
Cancel

(Python)[백준][브루트포스] 리모컨

1107번: 리모컨

문제 풀이


소스 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import sys

input = sys.stdin.readline
target = int(input())
n = int(input())
broken = list(map(int, input().split()))

# 현재 채널에서 + 혹은 - 만 사용하여 이동하는 경우
answer = abs(100 - target)

# 작은수에서 큰수로 이동할땐 500,000까지만 보면 되지만
# 반대로 큰수에서 작은수로 내려올 수도 있으므로 1,000,000까지 봐야함
for num in range(1000001):
    num = str(num)
    
    for j in range(len(num)):
        # 각 숫자가 고장났는지 확인 후, 고장 났으면 break
        # 하나라도 숫자가 고장났으면 숫자 버튼으로는 해당 숫자로 못 감
        if int(num[j]) in broken:
            break

        # 고장난 숫자 없이 마지막 자리까지 왔다면 answer 비교 후 업데이트
        elif j == len(num) - 1:
            # min(기존답, 해당 번호로부터 타겟까지의 차이 + 번호를 누른 횟수)
            answer = min(answer, abs(int(num) - target) + len(num))

print(answer)
This post is licensed under CC BY 4.0 by the author.