Algorithm/acmicpc.net

브루트 포스 : 리모컨

winney916 2022. 1. 2. 15:10
728x90

#1107 리모컨 https://www.acmicpc.net/problem/1107

 

1107번: 리모컨

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

www.acmicpc.net

이것도 쓸데없는 고민을 참 많이했다.

 

난 좀 단순하게 생각해볼 필요가 있을 듯 하다.

 

simple is best!!

 

target = int(input())
n = int(input())
broken = []
if n > 0:
    broken = input().split()

answer = abs(target-100)

for num in range(1000001):
    for n in str(num):
        if n in broken:
            break
    else:
        answer = min(answer, len(str(num)) + abs(target-num))

print(answer)

내가 의문을 품었던 부분은 딱 하나다.

 

왜 백만까지 순회해야하는가?

 

답은

 

입력값은 50만이 최대이지만 채널은 무한대까지 존재할 수 있다.

쉽게 말하면, 500000번 채널에 도달하기 위해서 600000번 채널을 거쳐갈 수 있다.

 

이해가 됐는가?

그래서 최대 도달값은 백만이 되어야한다.

만약 0~8까지의 수를 사용할 수 없을 때에 50만에 도달해야한다면 999999번 채널을 거쳐서 갈 수도 있다. (물론 다른 채널을 거치는게 더 빠르다.)

 

단순한 사고를 추구하자.