1107: 리모컨

ewillwin·2023년 4월 3일
0

Problem Solving (BOJ)

목록 보기
6/230

  • brute force로 해결
    • 0부터 1000000까지 순회하며 모든 경우를 확인
    • (채널은 무한대만큼 있기 때문에, 500000이하만 순회할 경우, 고장난 버튼이 [3, 4]일 때 N이 510000일 경우 최솟값은 6인데 10000로 출력됨)
  • 초기 최솟값을 abs(N-100)으로 세팅함
  • 그 후 0부터 1000000까지 순회하며 고장난 버튼이 없는 경우에 최솟값을 갱신해줌
import sys

N = int(input()); M = int(input())

err = []
if M != 0:
    err = list(sys.stdin.readline()[:-1].split(' '))

result = abs(N - 100)
for i in range(1000001):
    i_str = str(i)
    for j in range(len(i_str)):
        if i_str[j] in err:
            break
        if j == len(i_str)-1:
            result = min(abs(N - i) + len(i_str), result)

print(result)
  • 처음 접근은,
    • (N의 자릿수 >= 100과 N의 차이)일 때는 +,-을 누르고
    • (N의 자릿수 < 100과 N의 차이)일 때는 격차가 최소가 되게끔 숫자버튼을 누르고, +,-를 누르는
      방식으로 생각했는데, 생각을 단순하게 할 필요가 있는듯
  • 어차피 0부터 1000000까지 순회해도 시간 복잡도가 1000000 * 7 = 7000000 이하로 나오니까 시간 초과에 안걸림
profile
Software Engineer @ LG Electronics

0개의 댓글