
K 원소의 개수가 3개밖에 안된다.
모두 확인해 주더라도 시간의 문제가 없다.
#include <iostream>
#include <vector>
using namespace std;
int N, lenK, answer;
vector<int> K;
void recur(int num)
{
if (N < num) // N보다 큰 경우
{
return;
}
answer = max(answer, num);
num *= 10; // 자리 늘리기
for (int i = 0; i < lenK; ++i)
{
recur(num + K[i]);
}
}
int main()
{
ios::sync_with_stdio(0), cin.tie(0);
cin >> N >> lenK;
K = vector<int>(lenK);
for (int &k : K)
{
cin >> k;
}
recur(0);
cout << answer;
return 0;
}
K의 원소의 개수가 적어서 재귀를 활용하여 모든 경우를 확인해 주었다.
만약 N을 넘어간다면 사용할 수 없는 값이므로 무시해 준다.