본문 바로가기

JavaScript

[백준 node.js] 15649번 N과 M(1) (JavaScript)

https://www.acmicpc.net/problem/15649

 

15649번: N과 M (1)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

 

<풀이>

const input = require("fs")
  .readFileSync("/dev/stdin")
  .toString()
  .trim()
  .split(" ")
  .map((v) => parseInt(v));

[n, m] = input;

const visit = new Array(n).fill(0);

const dfs = (result) => {
  if (result.length === m) {
    console.log(result.join(" "));
    return;
  }

  for (let i = 0; i < n; i++) {
    if (visit[i] === 1) continue;
    visit[i] = 1;
    result.push(i + 1);
    dfs(result);
    result.pop();
    visit[i] = 0;
  }
};

dfs([]);

 

방문하지 않은 곳 방문하고 dfs다 돌면 출력해주고 return해서 pop해주고 다시 dfs돌고 반복!