1107번 : 리모컨 - Python

FriOct·2023년 5월 15일
0

PS

목록 보기
95/108

문제

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

풀이

가능한 모든 수를 확인하면서 가장 적게 버튼을 누르는 횟수를 갱신한다. 0~1000000까지의 채널들을 다 확인해 본다. 부서진 숫자로 만드는 채널은 제외한다. 1000000인 이유는 채널을 아래에서 위로 탐색하는 방법과 위에서 아래로 탐색하는 방법 둘다 사용해 봐야 하기 때문이다.

코드

from sys import stdin

input = stdin.readline

goal = int(input()) #목표 채널

n = int(input()) #부서진 버튼 개수

#부서진 버튼이 없다면 입력을 받지 않는다.
if n>0:
    broken = list(map(str,input().split()))
else:
    broken = list()

#목표 채널이 100이라면 0을 출력하고 끝낸다.
if goal == 100:
    print(0)
else:
    #처음 초기값을 100에서 +-만 이용해서 목표채널로 가는 횟수로 초기화
    min_count = abs(100-goal)

    #0~1000000 까지의 모든 수를 돌아보면서 가능한 수 중에서 최소값을 갱신한다.
    #10000000인 이유는 목표 채널에 대해 아래에서 위로 올라가는 경우와 
    #위에서 아래로 내려가는 경우를 고려하기 위해서이다.
    for num in range(1000001):
        #num을 바로 입력할 수 있는지 확인
        for i in str(num):
            if i in broken:
                break
        #num을 바로 입력할 수 있다면
        else:
            #최소값 갱신 num으로 가서 +-를 눌러야하는 횟수를 더하는것
            min_count = min(min_count,len(str(num))+abs(num-int(goal)))

    #최소값 출력
    print(min_count)
profile
꿈 많은 개발자

0개의 댓글