반응형
내 풀이
const fs = require('fs');
let [n, m] = (fs.readFileSync('./dev/stdin') + '').toString().trim().split(' ');
let visit = new Array(parseInt(n)).fill(false);
n = parseInt(n);
m = parseInt(m);
let ans = [];
const back = (d, n, m, idx) => {
if (d === m) {
console.log(...ans);
return;
}
for (let i = idx; i < n; i++) {
if (visit[i]) continue;
visit[i] = true;
ans.push(i + 1);
back(d + 1, n, m, i);
ans.pop();
visit[i] = false;
}
};
back(0, parseInt(n), parseInt(m), 0);
N과M (1) 풀이와 다른 점은 back 함수에 idx를 주는지의 여부였다.
그걸 모르고 아래 visit[i]를 바꾸는 부분에서 엄청나게 헤맸다.
if(visit[i] ) continue 밑에서
- visit.indexOf(true) !== i 인가
- ans.length === 0 인가
이런식으로 가지가지 이상한 조건을 줘가며 했지만, 관건은 인수 추가!
다른 풀이
const fs = require('fs');
let [n, m] = (fs.readFileSync('./test') + '').toString().trim().split(' ');
let visit = new Array(parseInt(n)).fill(false);
n = parseInt(n);
m = parseInt(m);
let ans = [];
let result = '';
function dfs(d, idx) {
if (d === m) {
console.log(...ans);
return;
}
for (let i = idx; i < n; i++) {
if (visit[i]) continue;
visit[i] = true;
ans.push(i + 1);
dfs(d + 1, i);
ans.pop();
visit[i] = false;
}
}
dfs(0, 0);
back 함수 (여기서는 dfs)에게 굳이 n,m 도 매번 줄 필요 없으니
이렇게 n,m인수를 빼는 방법도 있다!
🥳 N과M(2)를 매끄럽게 풀지 못한건 나의 완벽한 학습이 되지 않아서일까.... 반성했다.
'🔑 알고리즘 > 백준 JS' 카테고리의 다른 글
백준] node.js/ 1448_ 삼각형 만들기 (0) | 2021.10.23 |
---|---|
[백준] node.js/ 1748_ 수 이어쓰기(1) (0) | 2021.10.22 |
[백준] node.js/ 15649 N과 M 1 (0) | 2021.10.20 |
[백준] node.js/ 1302 베스트셀러 (0) | 2021.10.19 |
[백준] node.js/ 10866 덱 (0) | 2021.10.18 |
댓글