본문 바로가기
코딩테스트

브루드 포스 - 백준 1107 [Python]

by 지구킹 2021. 7. 28.
728x90

Problem)

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

 

1107번: 리모컨

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

www.acmicpc.net

 

Solution)

숫자버튼을 먼저 누른 다음, +/- 버튼을 눌러 채널을 이동하는 방식으로 접근한다. 

이때, 어떤 채널로 이동해야 하는지 알 수 없기 때문에 브루드 포스 방식으로 접근해야한다.

  1. 이동할 채널 C를 정한다.
  2. 고장난 버튼을 파악한다.
  3. 고장난 버튼이 포함되어 있지 않다면 |C-N|을 계산해 +/- 버튼을 몇번 눌러야 하는지 계산한다.

Answer)

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

broken = [False]*10

if m>0:
    a = list(map(int, input().split()))
else:
    a = []
    
for x in a:
    broken[x] = True
    
def possible(c):
    if c == 0:
        if broken[0]:
            return 0
        else:
            return 1
        
    l = 0
    while c >0:
        if broken[c%10]:
            return 0
        l +=1
        c //=10
    return l

ans = abs(n-100)
for i in range(0, 1000000+1):
    c = i
    l = possible(c)
    if l>0:
        press = abs(c-n)
        if ans > press + l:
            ans = press + l
            
print(ans)
728x90

댓글