⚡️algorithm
[완전탐색, 파이썬] 백준 1107. 리모컨
남남이루
2022. 4. 29. 09:50
문제
고장난 리모컨으로 채널을 이동하자!
어려웠던 점
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)