File tree Expand file tree Collapse file tree 2 files changed +77
-0
lines changed
백준/Silver/15649. N과 M (1) Expand file tree Collapse file tree 2 files changed +77
-0
lines changed Original file line number Diff line number Diff line change
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
+ // -> 한번 선택된 원소는 다음 재귀 함수에서 다시 선택되지 않는다.
Original file line number Diff line number Diff line change
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
+
You can’t perform that action at this time.
0 commit comments