본문 바로가기
Problem Solving/Implementation

[ 브루트 포스] 백준 1107번 : 리모컨 / 골드 5

by ggyongi 2022. 2. 20.
반응형

https://www.acmicpc.net/problem/1107

 

1107번: 리모컨

첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다.  둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼

www.acmicpc.net

n = int(input())
m = int(input())

if m == 0:
    print(min(len(str(n)), abs(n-100)))
    quit()


broken = list(map(int, input().split()))

def possible(s, broken):
    nums = set([int(x) for x in s])
    for b in broken:
        if b in nums:
            return False
    return True

variable = 0
answer = 1000000
while variable < 600000:

    if possible(str(max(0, n-variable)), broken):
        target = max(0, n - variable)
        answer = len(str(target)) + abs(n-target)
        break

    if possible(str(n+variable), broken):
        target = n + variable
        answer = len(str(target)) + abs(n-target)
        break

    variable += 1

print(min(answer, abs(n-100)))

브루트 포스로 타겟 채널과 가장 가까운 채널로 이동하고, +-버튼으로 타겟까지 도착.

이때 무한 루프를 돌 가능성이 있기 때문에 variable 값에 제한을 두어준다. 

이때 첨부터 +- 버튼만으로 이동하는 경우랑 비교를 해줘야함

 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글