문제

문제의 조건을 살펴 보면 n의 범위가 굉장히 크다. 그렇기 때문에 시간을 잘 고려해서 문제를 풀어 줘야 한다.
내가 생각한 방법은 가능한 범위내의 숫자안에서 눌러야할 버튼을 저장하면서 이전에 저장한 값보다 작다면 값을 갱신해주는 방식으로 최소 버튼 횟수를 구하는 것이다
이때 숫자의 범위는 n의 최댓값이 500000이기 때문에 최악의 경우 버튼이 9 빼고 다 고장나서 999999에서 - 버튼을 통해 채널을 바꾸어주는 경우이다 따라서 1000000 보다 작은 숫자의 범위내에서 경우의 수를 구해본다.
이때 주의 해줄 점이 있는데 바로 고장난 버튼이 0개인 경우이다.
고장난 버튼이 0개라면 고장난 버튼을 입력받는 부분이 실행되지 않아야하며 추후에 작동되는 코드에 영향이 가지 않도록 고장난 버튼을 저장하는 리스트를 미리 정의해주어야 한다.
import sys
input = sys.stdin.readline
n = int(input())
m =int(input())
#고장난 버튼 0개인 경우를고려해서 미리 초기화
btn = []
#고장난 버튼 0개인 경우 고려
if m!= 0:
btn = list(input().split())
ans = abs(100-n)
for i in range(1000000):
tmp_list = str(i)
#고장난 버트포함 여부 체크
j = 0
while(j < len(tmp_list)):
if tmp_list[j] not in btn:
j+=1
else:
break
#고장난 버튼 포함 안했다면
if j == len(tmp_list):
ans = min(ans,len(tmp_list)+abs(i-n))
print(ans)
범위를 생각해주고 고장난 버튼이 없는 경우를 예외처리해주는 부분이 중요했던 문제였던 것 같다.
'코딩테스트 > 백준' 카테고리의 다른 글
| [백준]14891번 톱니바퀴 -python 파이썬 (2) | 2024.10.12 |
|---|---|
| [백준] 2294번 동전2 -python 파이썬 (1) | 2024.10.12 |
| [백준] 2493번 탑 - python 파이썬 (2) | 2024.10.06 |
| [백준]1916번 최소비용 구하기 -python 파이썬 (2) | 2024.07.22 |
| [백준]2293번 동전1 - python 파이썬 (1) | 2024.07.19 |