구현 아이디어 10분
구현 30분
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int WrongButton[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int Check[500001];
int N{}, M{};
int MinimumPush = 2147000000;
void DFS(int L, int e)
{
if (L == e)
{
// N이 타겟 숫자.
int MakeNumber = 0;
for (int i = 0; i < e; ++i)
{
MakeNumber = MakeNumber * 10 + Check[i];
}
int SubPush = abs(N - MakeNumber);
SubPush += e;
if (MinimumPush > SubPush)
{
MinimumPush = SubPush;
}
}
else
{
for (int i = 0; i < 10; ++i)
{
if (-1 == WrongButton[i]) continue;
Check[L] = i;
DFS(L + 1, e);
}
}
}
int main() {
scanf("%d", &N);
scanf("%d", &M);
for (int i = 0; i < M; ++i)
{
int InputWrongButton = 0;
scanf("%d", &InputWrongButton);
WrongButton[InputWrongButton] = -1;
}
if (N == 100)
{
printf("0\n");
return 0;
}
string StrN = to_string(N);
int Digit = StrN.length();
// Digit의 -1, 0, +1 자릿수 조합
if (Digit - 1 != 0)
{
DFS(0, Digit - 1);
}
DFS(0, Digit);
DFS(0, Digit + 1);
// N - 100과 비교.
MinimumPush = min(abs(N - 100), MinimumPush);
printf("%d\n", MinimumPush);
return 0;
}