⚡️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)