읽기 전
- 불필요한 코드나 잘못 작성된 내용에 대한 지적은 언제나 환영합니다.
- 개인적으로 배운 점을 정리한 글입니다.
문제 링크
문제 풀이
브루트포스로 해결할 수 있다. 처음에 애매하게 수학을 사용하여 버튼으로 누를 수 있는 가장 가까운 번호를 찾으려 했는데 의미없는 시도였다. 우선 시작점이 주어지므로 기본 값을 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 |