15651번: N과 M (3)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
문제 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class boj15651 {
private int n;
private int m;
// 실제로 만든 중복 순열을 담기위한 배열
private int[] arr;
// 정답을 저장할 StringBuilder
private StringBuilder answer;
public void solution() throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer infoToken = new StringTokenizer(reader.readLine());
// n과 m 입력
n = Integer.parseInt(infoToken.nextToken());
m = Integer.parseInt(infoToken.nextToken());
// 순열 저장용 배열 생성
arr = new int[m];
// 정답 저장용 StringBuilder
answer = new StringBuilder();
// 재귀 시작
dfs(0);
System.out.println(answer);
}
// 몇번째 숫자를 고르고 있느냐
// 0 ~ Level ~ m - 1
private void dfs(int level){
// 모두 다 골랐다.
if (level == m){
// 정답 저장
for (int i = 0; i < m; i++) {
answer.append(arr[i]).append(' ');
}
answer.append('\n');
}
// 아직 남았다.
// 1 ~ n까지 반복한다.
else for (int i = 1; i < n + 1; i++) {
// 이번 숫자로 i를 택한다.
arr[level] = i;
dfs(level + 1);
}{
}
}
public static void main(String[] args) throws IOException {
new boj15651().solution();
}
}
출력 결과
입력
4 2
출력
1 1
1 2
1 3
1 4
2 1
2 2
2 3
2 4
3 1
3 2
3 3
3 4
4 1
4 2
4 3
4 4
'Algorithm' 카테고리의 다른 글
백준 1912 연속합 (0) | 2023.07.20 |
---|---|
백준 15652 N과 M (4) (0) | 2023.07.19 |
백준 2252 줄 세우기 (0) | 2023.07.18 |
백준 5904 Moo 게임 (0) | 2023.07.17 |
백준 1417 국회의원 선거 (0) | 2023.07.17 |