본문 바로가기
개발 노트/백준, 프로그래머스 풀이

[백준 15654/javascript] N과 M (5)

by tokkiC 2022. 8. 23.

자바스크립트로 풀어본 백트래킹 문제이다

조건의 배열을 미리 오름차순으로 정렬하면 0번째 부터 채워나가는 백트래킹 시에

사전순으로 나열 가능하다

자리수가 모두 채워 질때마다 수들을 임시배열에 넣고 join 을 통해 공백을 주어 매 경우마다 출력하게 하였다

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

 

15654번: N과 M (5)

N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열

www.acmicpc.net

let input = [];

const readline = require("readline").createInterface({
  input: process.stdin,
  output: process.stdout,
});

readline.on("line", (line) => {
  input.push(line);
});

readline.on("close", () => {
  solution(input);
  process.exit();
});

const solution = (inp) => {
  let n = Number(inp[0][0]);
  let m = Number(inp[0][2]);
  let inparr = inp[1].split(" ").map((el) => Number(el));
  let ar = new Array(10).fill(0);
  let isused = new Array(10).fill(0);

  inparr.sort((a, b) => a - b);
  const bt = (k) => {
    if (k === m) {
      let temp = [];
      for (let i = 0; i < m; i++) {
        temp.push(ar[i]);
      }
      console.log(temp.join(" "));
      return;
    }
    for (let i = 0; i < n; i++) {
      let t = inparr[i];
      if (!isused[t]) {
        ar[k] = t;
        isused[t] = 1;
        bt(k + 1);
        isused[t] = 0;
      }
    }
  };

  bt(0);
};

댓글