📊알고리즘, 문제풀이/📈문제풀이 (PS)

[알고리즘][Python] 백준 1107 리모컨 문제 풀이

Written by Donghak Park

문제 출처 : www.acmicpc.net/problem/1107

 

1107번: 리모컨

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

www.acmicpc.net


문제 해석 : 고장 리모컨을 가지고 최소 횟수로 원하는 채널로 이동하는 문제이다. 즉 가능한 모든 경우를 계산해서 가장 적게 버튼을 누를 수 있도록 설계해야한다.

 

문제 풀이 : 이 문제는 가능한 모든 경우를 고려해서 문제를 풀어야 하기 때문에 브루트포스 문제이다.

1. 만들 수 있는 모든 버튼을 만들면서 불가능한 경우를 체크한다.

2. 가능한 경우의 몇번 버튼을 눌러야하는지 계산한다.

3. 최솟값을 기록하며 가장 작은 횟수를 출력한다.

 

가능한 다른 풀이 : for 문을 이용해도 되지만 itertools에 있는 product를 이용해서 모든 경우를 만들고 시작해도 된다. 하지만 좀 더 복잡하고 오래 걸리기 때문에 for 문을 돌려서 풀이를 진행하는 것이 합리적으로 보인다.

 


풀이 코드

import sys
input = sys.stdin.readline

def possible_num(x):
    x = list(str(x))
    for element in x:
        if element in err:
            return False
    return True

N = int(input())
M = int(input())
err = list(input().strip())

answer = abs(N - 100)

for temp in range(1000001):
    if possible_num(temp) is True:
        answer = min(answer, len(str(temp)) + abs(N-temp))
print(answer)

author : donghak park
contact : donghark03@naver.com

## 문제의 저작권은 백준 알고리즘 사이트에 있습니다. 혹시 문제가 되는 부분이 있으면 연락 바랍니다.