728x90
문제 보기
이 문제는 브루트 포스 문제이다.
case를 두 가지로 나누고 브루트 포스를 진행하면 된다.
case 1
- abs(N - 100)의 값을 구한다. (채널 100번에서 +,- 버튼만 채널을 이동하는 것이다)
case 2
- 0번부터 1,000,000까지 브루트 포스를 진행한다. (이동하려고 하는 채널의 최댓값이 500,000 이기 때문에 500,000 보다 크면서 모든 숫자의 경우의 수를 거치는 1,000,000까지를 범위로 잡았다.
코드
if __name__ == "__main__":
enable = {str(i) for i in range(10)} # 0, 1, 2 ... 9 (가능한 수)
# input
N = int(input()) # 이동하려고 하는 채널
M = int(input()) # 고장난 버튼의 개수
if M != 0:
enable -= set(map(str, input().split())) # 고장난 버튼 리스트 제거
# case1 (100번에서 +, - 로만 움직이는 경우)
min_cnt = abs(100 - N)
# case2 (1,000,000 채널까지 브루트 포스 진행)
# 500,000 채널까지 존재하기 때문에 500,000 보다 크면서 모든 숫자의 경우를 거치는 1,000,000까지를 범위로 잡음
for num in range(1000001):
num = str(num)
for j in range(len(num)):
if num[j] not in enable:
break
elif j == len(num) - 1:
min_cnt = min(min_cnt, abs(N - int(num)) + len(str(num)))
print(min_cnt)
728x90
'알고리즘 풀이 > 백준' 카테고리의 다른 글
[ 백준 15683 ] 감시 - Python (0) | 2020.06.10 |
---|---|
[ 백준 3055 ] 탈출 - Python (0) | 2020.06.09 |
[ 백준 1916 ] 최소비용 구하기 - Python (2) | 2020.06.08 |
[ 백준 3190 ] 뱀 - Python (8) | 2020.06.07 |
[ 백준 18258 ] 큐2 - Python (4) | 2020.06.06 |