브루트포스 문제이다. i = 0부터 1,000,000까지 채널을 올려가면서 원하는 채널 n에 다다르기 위해 버튼을 누르는 수의 최솟값을 구해준다.
+와 - 버튼이 존재하기 때문에 절댓값 함수를 이용했고, 고장난 버튼인지 여부를 확인하기 위해 check함수를 만들었다.
#include <iostream>
#include <math.h>
using namespace std;
bool check(int k, int arr[])
{
if (k == 0)
{
for(int i = 0; arr[i] != -1; i++)
{
if (k == arr[i])
return false;
}
}
while(k > 0)
{
for(int i = 0; arr[i] != -1; i++)
{
if (k % 10 == arr[i])
return false;
}
k /= 10;
}
return true;
}
int numlen(int k)
{
int i = 0;
if (k == 0)
return 1;
while(k > 0)
{
i++;
k = k / 10;
}
return i;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n; cin >> n;
int broken; cin >> broken;
int arr[10] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
int mini = abs(100 - n);
for(int i = 0; i < broken; i++)
cin >> arr[i];
for(int nb = 0; nb <= 1000000; nb++)
{
if (check(nb, arr))
mini = min(mini, abs(n - nb) + numlen(nb));
}
cout << mini;
}