Xi_kor 2021. 5. 5. 12:23

기본값은 100에서 + 혹은 -만 눌러서 나올 수 있는 길이로 정했습니다. 그 후에 0부터 10000전까지 확인하면서 제일 최소의 횟수를 갱신해주었습니다. 

#include <iostream>
#include <algorithm>
using namespace std;

bool broken[15];

int possible(int c){
	if(c==0){
		if(broken[c])	return 0;
		else return 1;
	}
	else{
		int len=0;
		while(c>0){
			if(broken[c%10])	return 0;
			c/=10;
			len+=1;
		}
		return len;
	}
}

int main(){
	int ans;
	cin>>ans;
	
	int error;
	cin>>error;
	
	for(int i=0; i<error; i++){
		int a;
		cin>>a;
		broken[a]=true;
	}
	int n=ans-100;
	if(n<0) n=-n;
	
	//int minimum=2147000000;
	
	for(int i=0; i<=1000000; i++){
		int c=i;
		int len=possible(c);
		if(len>0){
			int left=abs(ans-c);
			if(n>len+left)	n=len+left;
		}
	}
	cout<<n;
	return 0;
}