반응형
🔺 문제
15650번: N과 M (2)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
import java.util.*;
import java.io.*;
public class Main {
static int N, M;
static int[] A;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
A = new int[M];
dfs(1, 0);
System.out.println(sb);
}
public static void dfs(int at, int depth) { // at : 현재 위치
if(depth == M) {
for(int val : A) {
System.out.print(val +" ");
}
System.out.println();
return;
}
for(int i = at ; i <= N ; i++) { // 🔔 at부터 탐색 시작
A[depth] = i; // 현재 깊이 위치에 i값 담기
dfs(i + 1, depth + 1); // (🔔재귀) 오름차순 탐색 위해 i + 1을 증가시킨 값 인자로 넘기기
}
}
}
|
cs |
✅ 해결 아이디어
✔ 백트래킹 (재귀) : 수열 사전 순 증가
- 고른 수열이 오름차순이어야 함.
→ dfs 함수 인자로 i + 1을 넘겨줘서 for문을 돌 때 시작하는 start 값 증가시키기
💬 느낀 점
종료 조건만 어떻게 바꿔주면 되지 않을까..
조건식만 잘 추가해주면 쉽게 풀 수 있지 않을까.. 해놓고 헤맸당ㅠ
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V | 8.23 |
(+ 2회독 : 8.23)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
import java.util.*;
import java.io.*;
public class Main {
static int N, M;
static int[] A;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
A = new int[M];
dfs(1, 0);
System.out.println(sb);
}
private static void dfs(int tmp, int depth) { // tmp : 현재 숫자
if(depth == M) {
for(int i : A) sb.append(i).append(" ");
sb.append("\n");
return;
}
for(int i = tmp ; i <= N ; i++) { // 👊 tmp부터 탐색 시작 👊
A[depth] = i; // 현재 위치에 i 담음
dfs(i + 1, depth + 1); // 🔔 재귀 ; 오름차순 탐색 위해 i + 1 증가시킨 값을 인자로 전달
}
}
}
|
cs |
(참고)
✔ 항상 감사드리는 주인장님,,,
[백준] 15650번 : N과 M (2) - JAVA [자바]
www.acmicpc.net/problem/15650 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열
st-lab.tistory.com
[ 백준 15650 / Java ] N과 M (2)
https://www.acmicpc.net/problem/15650 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.
codesign.tistory.com
반응형
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 15652번: N과 M (4) (0) | 2023.06.05 |
---|---|
[백준/JAVA] 15651번: N과 M (3) (1) | 2023.06.05 |
[백준/JAVA] 15649번: N과 M (1) (0) | 2023.06.05 |
[백준/JAVA] 1874번: 스택 수열 (0) | 2023.06.04 |
[백준/JAVA] 9251번: LCS (0) | 2023.06.04 |