코드
from sys import stdin
input = stdin.readline
N = int(input())
M = int(input())
br = input().split()
ans = abs(100 - N)
for num in range(1000001):
for n in str(num):
if n in br:
break
else: ans = min(ans, len(str(num)) + abs(num-N))
print(ans)
결과
풀이 방법
- 현재 채널이 100번이므로 ans를 abs(100 - 찾는채널)로 초기화한다
- 고장난 숫자 버튼을 포함하지 않는 모든 채널에 대하여 찾는 채널로 이동하기 위해 버튼을 눌러야 할 횟수를 계산하고 ans의 최소값을 업데이트한다
- 최대 채널번호가 500000이고 채널은 찾는 채널의 위 또는 아래 채널에서 출발하여 이동할 수 있으므로 탐색 범위는 0~1000001 로 해야 한다.
- 파이썬은
for-each
문을 지원한다. 이는 for문이 중간에 break되지않고 모두 실행된 경우 else 문을 실행시킨다.
- 코드에서 현재 탐색중인 채널(num)에 고장난 버튼의 숫자가 포함되지 않아 break 없이 for문이 모두 실행된 경우 else문을 실행하여 최소값을 계산한다.