정답코드 먼저 살펴보자
def BOJ1107():
n = int(input())
m = int(input())
count = abs(100 - n)
button = [True] * 10
if m != 0 :
for errored in list(map(int, input().split())) :
button[errored] = False
for i in range(1000001) :
listed_number = list(str(i))
listed_number_length = len(listed_number)
flag = True
for number in listed_number :
if button[int(number)] == False :
flag = False
break
if flag :
count = min(count, listed_number_length + abs(n - i))
print(count)
BOJ1107()
너무 어렵게 생각했다.
처음 시도했던 방법은 각 번호를 하나씩 접근하면서 최솟값을 찾고 ~~~~~~ 산으로 가버렸다.
완전 탐색을 떠올리지 못했었고 다른 분들의 코드를 참고했다.
완전 탐색으로 진행하자 다만 유의할 점은
1. 범위 설정은 숫자의 최댓값인 500000이 아니라 1000000이다. 숫자를 올리는 경우의 수만 있는것이 아니라 내리는 경우의 수도 있으므로 범위 설정을 이와 같이 했다.
2. 맨처음 count값을 비교값과 현재상태인 100의 차이로 해주었다.
https://www.acmicpc.net/problem/1107
1107번: 리모컨
첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼
www.acmicpc.net
'알고리즘' 카테고리의 다른 글
평범한 배낭[백준 12865] - python (0) | 2021.12.16 |
---|---|
퍼즐[백준1525] - python (0) | 2021.12.15 |
병든 나이트[백준 1783] - python (0) | 2021.12.13 |
RGB거리[백준 1149] - python (0) | 2021.12.12 |
RGB거리2[백준 17404] - python (0) | 2021.12.11 |