본문 바로가기
🔑 알고리즘/백준 JS

[백준] node.js/ 15650 N과M(2)

by Tamii 2021. 10. 21.
반응형

내 풀이

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)를 매끄럽게 풀지 못한건 나의 완벽한 학습이 되지 않아서일까.... 반성했다.

 

 

댓글