File tree Expand file tree Collapse file tree 2 files changed +92
-0
lines changed
백준/Silver/15664. N과 M (10) Expand file tree Collapse file tree 2 files changed +92
-0
lines changed Original file line number Diff line number Diff line change 1+ import java .io .*;
2+ import java .util .*;
3+
4+ public class Main {
5+ static int N , M , arr [];
6+ static boolean visited [];
7+ static StringBuilder sb ;
8+ static Set <String > set ;
9+
10+ public static void main (String [] args ) throws IOException {
11+ BufferedReader br = new BufferedReader (new InputStreamReader (System .in ));
12+
13+ StringTokenizer st = new StringTokenizer (br .readLine ());
14+ N = Integer .parseInt (st .nextToken ());
15+ M = Integer .parseInt (st .nextToken ());
16+
17+ arr = new int [N +1 ];
18+ visited = new boolean [N +1 ];
19+ sb = new StringBuilder ();
20+ set = new HashSet <>();
21+
22+ st = new StringTokenizer (br .readLine ());
23+ for (int i = 1 ; i <= N ; i ++) {
24+ arr [i ] = Integer .parseInt (st .nextToken ());
25+ }
26+
27+ // 수열을 오름차순으로 정렬
28+ Arrays .sort (arr );
29+
30+ dfs (1 , 1 , "" );
31+ System .out .print (sb .toString ());
32+ }
33+
34+ static void dfs (int start , int depth , String current ) {
35+ if (depth == M + 1 ) {
36+ if (!set .contains (current )) {
37+ set .add (current );
38+ sb .append (current .trim ()).append ("\n " );
39+ }
40+ return ;
41+ }
42+
43+ for (int i = start ; i <= N ; i ++) {
44+ if (!visited [i ]) {
45+ visited [i ] = true ;
46+ dfs (i + 1 , depth + 1 , current + arr [i ] + " " );
47+ visited [i ] = false ;
48+ }
49+ }
50+ }
51+ }
Original file line number Diff line number Diff line change 1+ # [ Silver II] N과 M (10) - 15664
2+
3+ [ 문제 링크] ( https://www.acmicpc.net/problem/15664 )
4+
5+ ### 성능 요약
6+
7+ 메모리: 16332 KB, 시간: 136 ms
8+
9+ ### 분류
10+
11+ 백트래킹
12+
13+ ### 제출 일자
14+
15+ 2024년 11월 25일 13:42:27
16+
17+ ### 문제 설명
18+
19+ <p >N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.</p >
20+
21+ <ul >
22+ <li>N개의 자연수 중에서 M개를 고른 수열</li>
23+ <li>고른 수열은 비내림차순이어야 한다.
24+ <ul>
25+ <li>길이가 K인 수열 A가 A<sub>1</sub> ≤ A<sub>2</sub> ≤ ... ≤ A<sub>K-1</sub> ≤ A<sub>K</sub>를 만족하면, 비내림차순이라고 한다.</li>
26+ </ul>
27+ </li>
28+ </ul >
29+
30+ ### 입력
31+
32+ <p >첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)</p >
33+
34+ <p >둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다.</p >
35+
36+ ### 출력
37+
38+ <p >한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.</p >
39+
40+ <p >수열은 사전 순으로 증가하는 순서로 출력해야 한다.</p >
41+
You can’t perform that action at this time.
0 commit comments