문제
고장난 리모컨으로 채널을 이동하자!
어려웠던 점
str으로 자릿수별로 숫자맞추면서 접근해야 하는 줄 알았는데, 완전탐색이어서 숫자 하나씩 올리면서 접근해야 한다.
의외로 구현하기가 어려웠다.
abs()
절대값 함수를 쓰지 않으면 음수 체크(if x < 0: x* -1)를 해줘야 해서 훨씬 코드가 길어진다.
수의 범위
수의 범위가 채널 범위 500,000를 그대로 쓰면 안되고, 리모컨 입력 접근 방향을 고려해야하기 때문에 자리수가 다를 수 있어 1,000,000으로 설정해야 한다.
- 작은 수에서 큰 수로 이동할땐 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()
for num in range(1000001):
for N in str(num):
if N in broken: # 해당 숫자가 번호를 눌러서 만들 수 없는 경우엔 스탑
break
else: # 번호를 눌러서 만들 수 있는 경우엔
# min(기존답, 번호를 누른 횟수 + 해당 번호로부터 타겟까지의 차이)
ans = min(ans, len(str(num)) + abs(num - target))
print(ans)
'⚡️algorithm' 카테고리의 다른 글
[그래프] 백준 11725. 트리 부모 (0) | 2022.04.29 |
---|---|
[그래프] 백준 1991. 트리 순회 (전위 순회, 중위 순회, 후위 순회) (0) | 2022.04.29 |
[완전탐색, 파이썬] 백준 1476. 날짜계산 (0) | 2022.04.29 |
[BFS 파이썬] 백준 7576. 토마토 (0) | 2022.04.29 |
[DFS, 파이썬] 백준 4963. 섬의 개수 (0) | 2022.04.29 |