N보다 작거나 같은 자연수 중에서, 집합 K의 원소로만 구성된 가장 큰 수를 출력하는 프로그램을 작성하시오. K의 모든 원소는 1부터 9까지의 자연수로만 구성된다.
예를 들어 N=657이고, K={1, 5, 7}일 때 답은 577이다.
첫째 줄에 N, K의 원소의 개수가 공백을 기준으로 구분되어 자연수로 주어진다. (10 ≤ N ≤ 100,000,000, 1 ≤ K의 원소의 개수 ≤ 3) 둘째 줄에 K의 원소들이 공백을 기준으로 구분되어 주어진다. 각 원소는 1부터 9까지의 자연수다.
단, 항상 K의 원소로만 구성된 N보다 작거나 같은 자연수를 만들 수 있는 경우만 입력으로 주어진다.
첫째 줄에 N보다 작거나 같은 자연수 중에서, K의 원소로만 구성된 가장 큰 수를 출력한다.
657 3
1 5 7
577
const fs = require('fs');
let [n, element] = fs.readFileSync(0, 'utf-8').toString().trim().split('\n');
let [N, K] = n.trim().split(' ').map(Number);
element = element.trim().split(' ').map(Number);
let max = 0;
function DFS(number) {
let num = Number(number.join(''));
if (number.length > 0 && num > N) return;
if (max < num) max = num;
if (number.length === N.length) return;
for (let i = 0; i < K; i++) {
DFS([...number, element[i]]);
}
}
DFS([]);
console.log(max);
보통 DFS를 풀이할 때 끝나는 조건이 있고, 끝나는 조건과 함께 현재까지의 결과를 저장하는 과정을 추가하는 과정으로 진행되었는데, 이 코드에서는 다소 달랐다. (물론 그렇게해서 구할 수...있을지도 모르지만) 이 문제에서 가장 힘들었던 부분은 꼭 둘의 자릿수가 동일하지 않다는 것이다. 애를 먹었던 입력 예시가 있는데 아래와 같다.
100000000 1
1
다음의 경우 11111111이 출력 값으로 나오게 된다. 이 부분을 해결해주기 위해 고생을 한 것 같다.