https://www.acmicpc.net/problem/15654
15654번: N과 M (5)
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열
www.acmicpc.net
📌 작성한 코드
// 15654
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "Beakjoon/Silver/test.txt";
const input = fs.readFileSync(filePath).toString().trim().split("\n");
const [N, M] = input[0].split(" ").map(Number);
const numbers = input[1]
.split(" ")
.map(Number)
.sort((a, b) => a - b);
let arr = new Array(M).fill(0);
let isUsed = new Array(10001).fill(false);
let answer = "";
const tracking = (count) => {
if (count === M) {
answer += `${arr.join(" ")}\n`;
return;
}
for (let i = 0; i < N; i++) {
if (!isUsed[numbers[i]]) {
arr[count] = numbers[i];
isUsed[numbers[i]] = true;
tracking(count + 1);
isUsed[numbers[i]] = false;
}
}
};
tracking(0);
console.log(answer);
📌 풀이
백트래킹을 이용해서 원하는 길이 만큼의 수열을 구하는 문제이다. 단, 이전 N과 M에서는 1부터 N까지였다면 해당 문제에서는 N개의 숫자가 주어진다는 것이 다르다. 그러므로 아주 간단하다. 저장될 숫자를 i가 아니라 numbers[i]로 바꿔주기만 하면 된다. -> `isUsed[i]` 대신 `isUsed[numbers[i]]`, `arr[count] = i`대신 `numbers[i]`를 넣어주면 된다
✅ 성공

'알고리즘 > 백준' 카테고리의 다른 글
| [JavaScript/백트래킹] 백준 실버 3 : 15656 - N과 M (7) (0) | 2024.02.02 |
|---|---|
| [JavaScript/백트래킹] 백준 실버 3 : 15655 - N과 M (6) (0) | 2024.02.02 |
| [JavaScript/백트래킹] 백준 실버 3 : 15652 - N과 M (4) (0) | 2024.02.01 |
| [JavaScript/백트래킹] 백준 실버 3 : 15651 - N과 M (3) (0) | 2024.02.01 |
| [JavaScript/백트래킹] 백준 실버 3 : 15650 - N과 M (2) (0) | 2024.02.01 |