새소식

Baekjoon

[BaekJoon] 15652 번 N과 M (4) 문제 - (nodejs)

  • -
728x90
문제 번호 :  15652 번

문제 바로가기 https://www.acmicpc.net/problem/15652

 

<<< 문제 내용 >>>

 

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\n");

const comb = (count, originArr, inArr) => {
  if (count === 0) {
    combArr.push(...[inArr.join(" ")]);
    return;
  }

  for (let i = 0; i < originArr.length; i++) {
    let temp = [];
    temp = originArr.slice(i);

    inArr.push(originArr[i]);

    comb(count - 1, temp, inArr);
    inArr.pop();
  }
};

let [arrLen, M] = input[0].split(" ").map(Number);
let origin = [];
for (let i = 0; i < arrLen; i++) {
  origin.push(i + 1);
}

let combArr = [];
comb(M, origin, []);

console.log(combArr.join("\n"));

* 최근 프로그래머스 문제를 위주로 풀다가 다시 백준에서 문제를 풀어봤다.

이유는 재귀를 자꾸 어려워했고, 백트래킹 및 조합 관련한 문제에서 자꾸 바로바로 코딩이 안되었기 때문이다.

 

연습겸 노트에 쓰면서 공부하니 좀 쉽게 정리되었다.

이 문제는 백트래킹 문제이고, 원하는 갯수(M)에 도달하면 더 이상 탐색을 하지 않도록 종료하는게 핵심이다.

 

그리고, 재귀가 헷갈리는 사람들은 originArr 와 재귀에 들어가는 temp에 slice로 값을 넣는데 집중하는 것이

도움이 된다.

 

어떻게 넣냐에 따라 천차만별의 값이 나오기 때문에, 노트에 써가면서 한번 정리를 해두면

다음에는 생각만으로도 떠오르는 것 같다.

 

 

 

 

도움이 되셨다면 공감 부탁드립니다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.