백준 15652번 Node.js 풀이

2024년 2월 7일

문제 링크


풀이

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

const [N, M] = input;

let selected = Array(M).fill(0);

let answer = "";

function dfs(depth, index) {
  if (depth === M) {
    answer += selected.join(" ") + "
";
    return;
  }

  for (let i = index; i <= N; i++) {
    selected[depth] = i;
    dfs(depth + 1, i);
  }
}

dfs(0, 1);

console.log(answer.trim());

여기서 index 인자와 i의 역할이 헷갈려서 몇번 틀렸다가 결국 성공한 문제이다.

i는 현재 깊이 에서 선택되는 숫자이다.

index는 index부터 N까지의 반복문을 돌며 조건에 맞는 순열을 찾는 시작점이다.

오름차순으로 만들어주어야하기때문에, i의 시작점을 index로 주어서, 무조건 시작되는 숫자보다 큰 수가 다음에 오도록 해야했다.