[백준] 1107번(리모컨)

·2023년 6월 26일

백준 문제풀이

목록 보기
94/159

백준 1107번


최종 제출 코드

number = int(input())
cnt = int(input())
btn = [True] * 10

# 고장난 버튼이 있을 때만 입력 받음
if cnt != 0:
  btn_list = list(map(int, input().split()))
  for i in btn_list:
    btn[i] = False

# 최소 버튼 누르는 수를 구하는 함수
def solution(num):
  
  # 숫자버튼을 누르지 않고 방향버튼만을 이용할 때의 값을 result로 초기화
  result = abs(num-100)
  
  for i in range(1000001):
    chk = True
    
    for j in range(len(str(i))):
      if btn[int(str(i)[j])] == False:
        chk = False
        break
    if chk == True:
      result = min(abs(i-num)+len(str(i)), result)

  return result
  
answer = solution(number)

print(min(abs(number - 100), answer))

◼ 가능한 케이스를 모두 검사

  • 반복문을 돌리면서 i를 문자열로 변환하여 문자열 i를 구성하는 버튼들이 모두 작동가능한 버튼인지 검사
  • 문자열 i를 구성하는 숫자들이 모두 작동가능한 경우, 문자열 i의 자릿수와 i에서 num까지 이동하기 위한 방향키 버튼의 개수를 더하여 그 값이 result보다 작을 경우 갱신한다.
profile
백엔드 개발자가 되고 싶어요(22.8.15~)

0개의 댓글