https://www.acmicpc.net/problem/1107
브루트포스 알고리즘, 즉 완전탐색을 이용하여 풀었다. 단순한 풀이긴 하지만 이것말고 생각나는 방법이 없었다.
1부터 1000000까지 만들수 있는 숫자들을 모두 구하고 그 숫자들과 이동할 채널의 차를 구해서 최솟값을 구하였다.
그리고 직접 (+, -) 버튼을 이용하여 이동하는 경우도 포함하여 마지막에 min함수로 비교해주었다.
완전탐색이라는 것만 안다면 별로 어렵지 않은 문제인거 같다. (물론 다른 방법도 있겠지만)
옮길 채널이 50만 까지라고 나와있지만 문제에서 채널은 무한대라고 하였다. 그뜻은 50만 이상에서 (-)를 눌러서 내려오는 경우도 생각해야하기 때문에 탐색범위를 100만으로 하였다.
코드는 다음과 같다.
import sys
def Sol():
input = sys.stdin.readline
N = int(input())
num_of_broken = int(input())
if num_of_broken != 0:
broken = input().split()
else:
broken = []
move_p_m = abs(100 - N)
answer = 1000000
for i in range(1000001):
temp = move_p_m
for j in list(str(i)):
if j in broken:
break
else:
temp = abs(i-N) + len(list(str(i)))
answer = min(move_p_m, temp, answer)
print(answer)
if __name__ == "__main__":
Sol()
'📚알고리즘 > 백준' 카테고리의 다른 글
[백준 2696번] 중앙값 구하기 (Python/파이썬) (0) | 2023.01.27 |
---|---|
[백준 7662번] 이중 우선순위 큐 (Python/파이썬) (0) | 2023.01.24 |
[백준 11286번] 절댓값 힙 (Python/파이썬) (0) | 2023.01.21 |
[백준 17298번] 오큰수 (Python/파이썬) (0) | 2023.01.20 |
[백준 11003번] 최솟값 찾기 (Python/파이썬) (0) | 2023.01.17 |