알고리즘/BOJ

[BOJ 1107] 리모컨

히더 2018. 7. 23. 14:01

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


1. 완전탐색을 통해 모든 케이스를 체크한다.


#include <iostream>

#include <algorithm>

using namespace std;


#define MAX_ERR 11


int i, j, N, ERR, count1, count2;

int a[MAX_ERR], result;


void input()

{

int aa; cin >> N; cin >> ERR;

for (i = 1;i <= ERR;i++) { cin >> aa; a[aa] = 1; }

}


int zari(int n)

{

int zari = 0;

do {

n = n / 10;

zari++;

} while (n > 0);


return zari;

}


bool check(int n)

{

if (n == 0)

{

if (a[0] == 1) return false;

}

else {

while (n > 0)

{

if (a[n % 10] == 1) return false;

n = n / 10;

}

}

return true;

}


void cal()

{

result = 0; count1 = 0; count2 = 0;

int tmp = 0;


int n_up = N; int n_dn = N;

while (!check(n_up) && (n_up) != 1000001)

{

count1++; n_up++;

}

if(n_up!=1000001)result = zari(n_up) + count1;

else result = 999999;


while (!check(n_dn)&&(n_dn)!=-1)

{

count2++; n_dn--;

}

if(n_dn!=-1) tmp = zari(n_dn) + count2;

else tmp = 999999;


result = min(result, tmp);

result = min(result, abs(N - 100));

}


int main()

{

input(); cal();

cout << result << endl;

}