문제 링크
https://www.acmicpc.net/problem/1107
1107번: 리모컨
첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼
www.acmicpc.net
풀이
- 어떻게 풀어야 하나 모르겠어서 알고리즘 분류를 보니 브루트포스로 풀 수 있는 문제였다.
- broken : 고장난 버튼 저장
- answer : 현재 위치가 100이므로 최솟값은 +나 -로만 이동한 경우인 abs(100-n)이다.
- 채널 수가 무한대 이므로 1000001 까지 탐색한다.
- 숫자에 고장난 버튼이 포함되어 있으면 break,
아니면 현재 위치로 이동하기 위해 누른 버튼 수 + 현재 위치에서 +,-로 n까지 이동하는 거리와 answer 중 최솟값 갱신
import sys
input = sys.stdin.readline
INF = int(1e9)
n = int(input())
m = int(input())
# broken : 고장난 버튼 저장
broken = list(map(int,input().split()))
# answer : 현재 위치가 100이므로 최솟값은 +나 -로만 이동한 경우인 abs(100-n)이다.
answer= abs(100-n)
# 채널 수가 무한대 이므로 1000001 까지 탐색
for i in range(1000001):
for j in range(len(str(i))):
# 숫자에 고장난 버튼이 포함되어 있으면 break
if int(str(i)[j]) in broken:
break
# 마지막까지 고장난 버튼이 없다면
elif j == len(str(i)) -1:
# 현재 위치로 이동하기 위해 누른 버튼 수 + 현재 위치에서 +,-로 n까지 이동하는 거리와 answer 중 최솟값 갱신
answer = min(answer, len(str(i)) + abs(i-n))
print(answer)
'개발 > algorithm' 카테고리의 다른 글
[백준 2869번] 달팽이는 나무에 올라가고 싶다 - python (0) | 2022.02.13 |
---|---|
[백준 2292번] 벌집 -python (0) | 2022.02.13 |
[백준 1012번] 유기농 배추 - python (0) | 2022.02.13 |
[백준 1003번] 피보나치 함수 - python (0) | 2022.02.13 |
[백준 15829번] Hashing - python (0) | 2022.02.13 |