본문 바로가기
알고리즘 (Python)/백준

[백준 1107번][골드5] 리모컨 (파이썬)

by 근수짜세 2022. 8. 17.

문제출처

https://www.acmicpc.net/problem/1107

 

1107번: 리모컨

첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다.  둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼

www.acmicpc.net


문제를 스스로 해결하였는가? -> X

 입력조건을 확인하지 못한게 실패의 원인인 것 같다. 모든 문제든 입력조건만 제대로 확인하면 어떤 알고리즘을 쓸 수 있을지 어느정도 감이 온다는데, 나는 아직 습관이 안배여있어서 매번 체크하는걸 깜빡한다. 무튼 모든 경우의 수를 다 따져도 괜찮은 문제라는걸 알게되면 쉽게 풀 수 있는 문제다. 


사용된 알고리즘

  • 브루트포스

주의할 점

  • 입력조건이 0 ≤ N ≤ 500,000라서 완전탐색해도 시간제한에 걸리지 않는다.
  • 주어진 N의 최댓값이 500,000이라도 그 보다 큰 값에서 채널을 이동하는 경우도 따져야한다. 따라서 1,000,000까지 탐색해야한다.

전체코드

dest = int(input())
m = int(input())
if m != 0: broken = input().split(' ')
else: broken = []
min_move = abs(dest - 100)

for nums in range(1000001):
    flag = True
    for num in str(nums):
        if num in broken: flag = False
    if flag:
        move = len(str(nums)) + abs(dest - nums)
        min_move = min(min_move, move)
print(min_move)

댓글