읽기 전

  • 불필요한 코드나 잘못 작성된 내용에 대한 지적은 언제나 환영합니다.
  • 개인적으로 배운 점을 정리한 글입니다.

문제 링크

문제 1107 리모컨

문제 풀이

브루트포스로 해결할 수 있다. 처음에 애매하게 수학을 사용하여 버튼으로 누를 수 있는 가장 가까운 번호를 찾으려 했는데 의미없는 시도였다. 우선 시작점이 주어지므로 기본 값을 abs(N - 100)으로 두자. 그리고 최솟값부터 최댓값까지 채널을 순회하면서 해당 채널이 번호를 눌러 갈 수 있는지 체크하고 가능하다면 목표채널까지의 간격을 구해 정답을 가능한 값들의 최솟값으로 갱신한다.

  • 채널이 주어졌을 때 해당 채널의 자리수에 고장난 버튼 존재 여부 검사하는 함수 정의
  • 만약 가능하다면 해당 채널과 목표채널까지의 간격을 구해 이전 정답보다 작다면 갱신
  • 순회를 마치고 저장된 정답을 리턴

python 코드

import sys
input = sys.stdin.readline

def solve():
    def check(val):
        cnt = 0
        if val == 0:
            if broken[0] == 1:
                return 0
            return 1
        while val > 0:
            d = val % 10
            if broken[d] == 1:
                return 0
            cnt += 1
            val //= 10
        return cnt
    N = int(input())
    M = int(input())
    nums = list(map(int, input().split()))
    broken = [0] * 10
    for n in nums:
        broken[n] = 1
    sol = abs(N - 100)
    for cur in range(1000000):
        press = check(cur)
        if press > 0:
            press_up_down = abs(cur - N)
            if sol > press + press_up_down:
                sol = press + press_up_down
    print(sol)
solve()

'Algorithms > Baekjoon' 카테고리의 다른 글

BOJ #2437 저울  (0) 2021.08.12
BOJ #1202 보석 도둑  (0) 2021.08.12
BOJ #11051 이항 계수 2  (0) 2021.08.10
BOJ #10217 KCM Travel  (0) 2021.08.01
BOJ #9251 LCS  (0) 2021.07.28

+ Recent posts