BaekJoon
15650번:N과 M (2) [Java]
충 민
2022. 8. 31. 17:28
이 문제는 백트래킹 알고리즘을 이용하여 풀었다.
백트래킹이란
해를 찾는 도중 해가 아니어서 막히면, 되돌아가서 다시 해를 찾아가는 기법을 말합니다. 최적화 문제와 결정 문제를 푸는 방법이 됩니다.
😀 DFS와 백트래킹
알고리즘 - 백트래킹(Backtracking)의 정의 및 예시문제
이번에 살펴볼 개념은 백트래킹에 관한 내용입니다.
chanhuiseok.github.io
[소스코드]
package algorithm15650;
import java.io.*;
import java.util.*;
public class Main {
static int n, m;
static int a[];
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
n = sc.nextInt();//수 입력
m = sc.nextInt();//한줄당 개수 입력
a = new int[m];
go(1,0);
}
public static void go(int index,int depth) {
//인덱스가 마지막 위치에 도달하면 수열 출력
if(depth == m) {
for(int val:a) {
System.out.print(val + " ");
}
System.out.println();
return;
}
// 1부터 ~ N개의 수를 선택
for(int i=index; i<=n; i++) {
a[depth]=i;
go(i+1,depth+1);
}
}
}