코딩테스트/백준 (python)
백준 / 1107번 / 리모컨 / python 파이썬
seulll
2024. 9. 12. 19:45
문제 : https://www.acmicpc.net/problem/1107
코드
import sys
input = sys.stdin.readline
n = int(input())
m = int(input())
ans = abs(100 - n)
if m:
btn = list(input().split())
else:
btn = []
for num in range(1000001):
for i in str(num):
if i in btn:
break
else:
ans = min(ans, len(str(num)) + abs(num - n))
print(ans)
처음에는 버튼을 최소한으로 눌러야 한다는 조건에 고장난 버튼의 최소, 최댓값과 ans(n - 100)와의 절댓값의 차가 더 작은 것을 구해가며 접근했지만 몇 개의 예제를 제외하고는 올바른 출력이 나오지 않았다.
그 이유는 작은 수에서 큰 수로 이동할 땐 500,000 까지만 보면 되지만 반대로 큰 수에서 작은 수로 내려올 수 있으므로 1,000,000 까지 봐야했는데 범위를 잘못 지정한 것이었다.
또한 , 아래 코드와 같이
ans = min(ans, len(str(num)) + abs(num - n)):
min(기존 값, 번호를 누른 횟수 + 목표 채널까지의 차)를 구하는 식을 세우는 것이 문제 접근의 핵심인 것 같다.