알고리즘 풀이/백준

[ 백준 1107 ] 리모컨 - Python

12.tka 2020. 6. 9. 16:00
728x90

문제 보기

이 문제는 브루트 포스 문제이다.

 

case를 두 가지로 나누고 브루트 포스를 진행하면 된다.

 

case 1

- abs(N - 100)의 값을 구한다. (채널 100번에서 +,- 버튼만 채널을 이동하는 것이다)

 

case 2

- 0번부터 1,000,000까지 브루트 포스를 진행한다. (이동하려고 하는 채널의 최댓값이 500,000 이기 때문에 500,000 보다 크면서 모든 숫자의 경우의 수를 거치는 1,000,000까지를 범위로 잡았다.

 

코드

if __name__ == "__main__":

    enable = {str(i) for i in range(10)}  # 0, 1, 2 ... 9 (가능한 수)

    # input
    N = int(input())  # 이동하려고 하는 채널
    M = int(input())  # 고장난 버튼의 개수
    if M != 0:
        enable -= set(map(str, input().split()))  # 고장난 버튼 리스트 제거

    # case1 (100번에서 +, - 로만 움직이는 경우)
    min_cnt = abs(100 - N)

    # case2 (1,000,000 채널까지 브루트 포스 진행)
    # 500,000 채널까지 존재하기 때문에 500,000 보다 크면서 모든 숫자의 경우를 거치는 1,000,000까지를 범위로 잡음
    for num in range(1000001):
        num = str(num)
        for j in range(len(num)):
            if num[j] not in enable:
                break
            elif j == len(num) - 1:
                min_cnt = min(min_cnt, abs(N - int(num)) + len(str(num)))
    print(min_cnt)



728x90

'알고리즘 풀이 > 백준' 카테고리의 다른 글

[ 백준 15683 ] 감시 - Python  (0) 2020.06.10
[ 백준 3055 ] 탈출 - Python  (0) 2020.06.09
[ 백준 1916 ] 최소비용 구하기 - Python  (2) 2020.06.08
[ 백준 3190 ] 뱀 - Python  (8) 2020.06.07
[ 백준 18258 ] 큐2 - Python  (4) 2020.06.06