FeelingXD

[백준-1107] 리모컨 ✨ 본문

프로그래밍/문제풀이

[백준-1107] 리모컨 ✨

FeelingXD 2024. 1. 11. 17:18

❓ Problem

1.3 {"originWidth":1257,"originHeight":662,"style":"alignCenter"}

🤔 How

답이될수 있는 경우 👀

1. 현재 보고있는채널(100) 에서부터시작해서 +/- 버튼으로만 목표 채널까지 이동하는 경우
2. 버튼을 사용해서 특정 채널로 변경한후애 +/- 버튼을 추가로 사용해 목표 채널까지 이동하는 경우 (2가지 : 위로가는 경우와 아래로가는 경우)

접근방법

  1. 답이 될수있는경우 [1]번 으로 정답값을 초기화해준다.
  2. 그후 목표 채널로부터 위/ 아래로 값을 탐색해 고장난 버튼을 사용하지 않고 이동할수있는 최초의 수를 찾아서 원래 가고자한 목표채널과의 차이를 더해주고. 답이 최소값이 될경우 갱신한다.
    • 현재 구하고자하는것은 버튼누르는 횟수이므로 처음 채널이동시 누르는 버튼횟수도 생각하여야한다. ex) 7751 채널로 이동시 버튼을 4번누른다.

❗ Solve

# 리모컨
import sys
input =sys.stdin.readline

def solution():
    target=int(input())
    len_error_btn=int(input())
    err_btns=[]
    if len_error_btn:
        err_btns=list(map(str, input().strip()))

    # 기본답 100 채널에서 +- 로만 이동하는경우
    ans=abs(target-100)

    #상한선
    for i in range(target,target+(ans+1)):
        c_target=str(i)
        if not(set(err_btns) & set(c_target)):
            ans=min(ans,len(c_target)+abs(int(c_target)-target))
            break
    #하한선
    for i in range(target,target-(ans+1),-1):
        c_target=str(i)
        if not(set(err_btns) & set(c_target)):
            ans=min(ans,len(c_target)+abs(int(c_target)-target))
            break

    print(ans)

    pass
if __name__=="__main__": # 실행되는 부분
    solution()
    pass