프로그래밍/알고리즘 풀이
[node.js] 부등호 ( 백준 2529번 )
카카수(kakasoo)
2021. 8. 3. 18:25
반응형
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
const input = [];
rl.on("line", (line) => {
input.push(line);
}).on("close", () => {
const num = Number(input.splice(0, 1)) + 1;
const expression = input[0].split(" ");
const numbers = new Array(10).fill(0).map((el, i) => i);
const visited = new Array(10).fill(false);
const answer = [];
const dfs = (arr = []) => {
if (arr.length === num) {
answer.push([...arr]);
return;
}
for (let i = 0; i < numbers.length; i++) {
const curNumber = numbers[i];
const lastIdx = arr.length - 1;
const express = expression[lastIdx];
if (!visited[i]) {
if (
arr.length === 0 ||
new Function(
`return ${arr[lastIdx]}${express}${curNumber}`
)()
) {
visited[i] = true;
arr.push(curNumber);
dfs(arr);
arr.pop();
visited[i] = false;
}
}
}
};
dfs();
const answerArr = answer.map((el) => Number(el.join("")));
const maxValue = Math.max(...answerArr);
const minValue = Math.min(...answerArr);
const numPad = (number) => {
let str = String(number);
while (str.length < num) {
str = "0" + str;
}
return str;
};
console.log(numPad(maxValue));
console.log(numPad(minValue));
});
원래는 순열로 풀려고 했지만, 실패했다.
너무 많은 경우의 수를 고려해야 하기 때문에 시간 초과는 필연적이다. ( 메모리 문제는 제너레이터로 해결한다 쳐도. )
그래서 백트래킹으로 해결했다.
반응형