728x90
문제
https://www.acmicpc.net/problem/1107
1107번: 리모컨
첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼
www.acmicpc.net
# 이 문제는 세 가지 경우를 생각해야한다.
# 첫 번째는 ++, --로 목표 값을 만드는 방법
# 두 번째는 번호로 바로 목표 값을 만드는 방법
# 첫 번째 방법과 두 번째 방법을 섞은 방법
# 그리고 range 500,000이 아닌 1,000,000인 것을 파악해야한다.
target = int(input())
ans = abs(100 - target) # ++ or -- 로 이동할 경우 -> 최댓값(비교를 위해)
M = int(input())
if M: # 고장난게 있을 경우만 인풋을 받음
broken = set(input().split())
else:
broken = set()
# 작은수에서 큰수로 이동할땐 500,000 까지만 보면 되지만
# 반대로 큰수에서 작은수로 내려올수도 있으므로 1,000,000 까지 봐야함(ex, 600000일때 1,2,3,4,5가 고장난 버튼))
for num in range(1000001):
for N in str(num): # 숫자를 하나씩 짤라서 조건문 파악
if N in broken: # 해당 숫자가 번호를 눌러서 만들 수 없는 경우엔 스탑
break
else: # 번호를 눌러서 만들 수 있는 경우엔
# 버튼을 누른다는 의미는 숫자 하나하나에 한번의 버튼을 누른다는 의미(예를 들면, 5437은 "5", "4", "3", "7" -> 총 4번을 누른다는 의미)
# min(기존답, 번호를 누른 횟수 + 해당 번호로부터 타겟까지의 차이)
ans = min(ans, len(str(num)) + abs(num - target))
print(ans)
'알고리즘 > baekjoon' 카테고리의 다른 글
[알고리즘/baekjoon] 7662_이중 우선순위 큐(python) (0) | 2021.12.02 |
---|---|
[알고리즘/baekjoon] 10026_적록색약(python) (0) | 2021.12.02 |
[알고리즘/baekjoon] 5430_AC(python) (0) | 2021.11.30 |
[알고리즘/baekjoon] 16928_뱀과 사다리 게임(python) (0) | 2021.11.30 |
[알고리즘/baekjoon] 7576_토마토(python) (0) | 2021.11.27 |
댓글