728x90
[백준알고리즘] 1107번: 리모컨 -Python
https://www.acmicpc.net/problem/1107
브루트 포스로 해결해야 하는 건지 모르고 이상하게 풀었었다... 조건을 다 맞추려고 하다 보니 오류가 계속 발생하고 통과가 안 되는 반례가 계속 존재했다.
이 문제의 경우에는 MAX가 500000으로 depth도 얕기 때문에 recursion depth도 6으로 낮고, 0~9까지의 각 자리 숫자가 다 가능하다고 했을 때도 경우의 수가 10^6으로 많지 않다.
보통 1초에 반복 횟수가 10^8 (1억)을 초과할 경우 시간 초과가 발생한다고 보기 때문에 충분히 여유있다.
https://book.algospot.com/estimation.html
따라서 가능한 번호의 버튼을 모두 누르면서 비교해 최소 클릭 횟수를 구하도록 해주었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import sys
def solve(sub):
global ans
for p in possible:
now = sub + str(p)
ans = min( ans, len(str(int(now))) + abs(n-int(now)) )
if len(now) < 6:
solve(now)
n = int(sys.stdin.readline())
m = int(sys.stdin.readline())
ans = abs(n-100)
possible = set()
if m:
broken = set(map(int, sys.stdin.readline().split()))
possible = set(i for i in range(10)).difference(broken)
else:
ans = min(ans, len(str(n)))
solve('')
print(ans)
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
잘못된 점이나 부족한 점 지적해주시면 감사하겠습니다
728x90
'algorithm > 백준알고리즘' 카테고리의 다른 글
[백준알고리즘] 10971번: 외판원 순회 2 -Python (6) | 2020.03.08 |
---|---|
[백준알고리즘] 1451번: 직사각형으로 나누기 -Python (0) | 2020.03.08 |
[백준알고리즘] 1744번: 수 묶기 -Python (0) | 2020.03.07 |
[백준알고리즘] 2873번: 롤러코스터 -Python (2) | 2020.03.07 |
[백준알고리즘] 1783번: 병든 나이트 -Python (0) | 2020.03.06 |