chldkato

백준 1107 리모컨 (파이썬) 본문

백준

백준 1107 리모컨 (파이썬)

chldkato 2020. 6. 4. 16:35

https://www.acmicpc.net/problem/1107

 

1107번: 리모컨

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

www.acmicpc.net

그리디하게 풀려다가 반례가 있어서 모든 경우의 수를 다 계산

 

1. 리스트 a에 버튼에 대한 정보를 저장. 인덱스에 해당하는 버튼이 고장나면 0

2. 고장난 버튼이 있으면 버튼을 입력받고 해당 버튼을 0으로 저장

3. cnt에 버튼을 누르는 횟수의 최소값을 저장. 초기값은 (목표 채널 - 초기채널 100) 으로 설정

4. 가능한 모든 경우의 수를 다 계산해본다

   해당 채널을 누를 수 있으면 최소값을 계산한다

   횟수는 해당 채널에서 +나 -를 누르는 횟수 = abs(n - i) 와 해당 채널을 누르는 횟수 = len(list_i)

import sys

input = sys.stdin.readline

n = int(input())
list_n = list(str(n))
m = int(input())
a = [1 for _ in range(10)]

if m != 0:
    broken = list(map(int, input().split()))
    for i in broken:
        a[i] = 0

cnt = abs(n - 100)
for i in range(1000001):
    list_i = list(str(i))
    flag = 0
    for c in list_i:
        if a[int(c)] == 1:
            continue
        else:
            flag = 1
            break

    if flag:
        continue
    else:
        cnt = min(cnt, abs(n - i) + len(list_i))

print(cnt)

Comments