BOJ 1107 리모컨

LONGNEW·2021년 1월 22일
0

BOJ

목록 보기
88/333

https://www.acmicpc.net/problem/1107
시간 2초, 메모리 256MB
input :

  • N (0 ≤ N ≤ 500,000)
  • M (0 ≤ M ≤ 10)
  • 셋째 줄에는 고장난 버튼이 주어지며, 같은 버튼이 여러 번 주어지는 경우는 없다.

output :

  • 채널 N으로 이동하기 위해 버튼을 최소 몇 번 눌러야 하는지

조건 :

  • 리모컨에는 버튼이 0부터 9까지 숫자, +와 -가 있다.
  • +를 누르면 현재 보고있는 채널에서 +1된 채널로 이동하고, -를 누르면 -1된 채널로 이동한다.
  • 수빈이가 지금 보고 있는 채널은 100번이다.

경우의 수를 생각했어야 한다.
번호를 눌러서 모든 경우를 따질 때에, 누르는 번호의 길이 + (n - i) 해서 구할 수 있고 /
100을 기준으로 + - 만 눌러서 움직이는 경우도 생각해야 한다.
abs(n - 100)

이 경우를 생각하지 못해서 풀이를 찾아 봤다...
그리고 반복문 돌리는데 채널이 0부터 50만이니까 0부터 시작해야 한다.....
채널은 무한대로 가능하니 50만을 기준으로 0 에서 부터 확인 한다면 100만에서부터 50만도 확인 해야 하니까 100만 까지 반복하자..

import sys

n = int(sys.stdin.readline())
m = int(sys.stdin.readline())
button = list(sys.stdin.readline().strip())


def check(num):
    for item in num:
        if item in button:
            return False
    return True


cnt = abs(n - 100)
for i in range(1000001):
    str_num = str(i)
    if check(str_num):
        cnt = min(cnt, len(str_num) + abs(i - n))
print(cnt)

0개의 댓글