Skip to content

Commit 6a476e3

Browse files
committed
[Silver III] Title: N과 M (1), Time: 312 ms, Memory: 40840 KB -BaekjoonHub
1 parent 06ca18b commit 6a476e3

File tree

2 files changed

+77
-0
lines changed

2 files changed

+77
-0
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
let fs = require('fs');
2+
let input = fs.readFileSync('/dev/stdin').toString().split('\n');
3+
4+
let [N, M] = input[0].split(' ').map(Number);
5+
let arr = [];
6+
7+
for (let i = 1; i <= N; i++) {
8+
arr.push(i);
9+
}
10+
let visited = new Array(N).fill(false);
11+
let selected = [];
12+
13+
let answer = '';
14+
15+
const dfs = (arr, depth) => {
16+
if (depth == M) {
17+
let result = [];
18+
for (let i of selected) result.push(arr[i]);
19+
for (let x of result) answer += x + ' ';
20+
answer += '\n';
21+
return;
22+
}
23+
for (let i = 0; i < arr.length; i++) {
24+
if (visited[i]) continue;
25+
selected.push(i);
26+
visited[i] = true;
27+
dfs(arr, depth + 1);
28+
selected.pop();
29+
visited[i] = false;
30+
}
31+
};
32+
33+
dfs(arr, 0);
34+
console.log(answer);
35+
36+
// N보다 작은 수 && 사용하지 않은 숫자들 중 작은 수부터 차례로 사용
37+
// M은 깊이를 조절
38+
39+
// 모든 순열의 수를 고려하기 위해 재귀 함수(백트래킹) 사용
40+
// 하나의 순열을 트리에서 리프 노드까찌의 경로로 생각할 수 있다.
41+
// -> 이때, M개의 원소를 뽑는 순열을 고려하는 것이므로, 깊이는 M과 같다.
42+
// 원소를 중복하여 선택하지 않으므로, 방문처리 배열을 사용한다.
43+
// -> 한번 선택된 원소는 다음 재귀 함수에서 다시 선택되지 않는다.
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# [Silver III] N과 M (1) - 15649
2+
3+
[문제 링크](https://www.acmicpc.net/problem/15649)
4+
5+
### 성능 요약
6+
7+
메모리: 40840 KB, 시간: 312 ms
8+
9+
### 분류
10+
11+
백트래킹
12+
13+
### 제출 일자
14+
15+
2025년 1월 30일 17:12:59
16+
17+
### 문제 설명
18+
19+
<p>자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.</p>
20+
21+
<ul>
22+
<li>1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열</li>
23+
</ul>
24+
25+
### 입력
26+
27+
<p>첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)</p>
28+
29+
### 출력
30+
31+
<p>한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.</p>
32+
33+
<p>수열은 사전 순으로 증가하는 순서로 출력해야 한다.</p>
34+

0 commit comments

Comments
 (0)