[백준1107] 리모컨 (C++)

유후·2022년 5월 14일
0

백준

목록 보기
26/66

풀이

브루트포스 문제이다. 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;
}
profile
이것저것 공부하는 대학생

0개의 댓글