[BOJ] 리모컨

Minsu Han·2022년 9월 2일
0

알고리즘연습

목록 보기
5/105

코드

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)

결과

image


풀이 방법

  • 현재 채널이 100번이므로 ans를 abs(100 - 찾는채널)로 초기화한다
  • 고장난 숫자 버튼을 포함하지 않는 모든 채널에 대하여 찾는 채널로 이동하기 위해 버튼을 눌러야 할 횟수를 계산하고 ans의 최소값을 업데이트한다
  • 최대 채널번호가 500000이고 채널은 찾는 채널의 위 또는 아래 채널에서 출발하여 이동할 수 있으므로 탐색 범위는 0~1000001 로 해야 한다.
  • 파이썬은 for-each문을 지원한다. 이는 for문이 중간에 break되지않고 모두 실행된 경우 else 문을 실행시킨다.
  • 코드에서 현재 탐색중인 채널(num)에 고장난 버튼의 숫자가 포함되지 않아 break 없이 for문이 모두 실행된 경우 else문을 실행하여 최소값을 계산한다.

profile
기록하기

0개의 댓글