[백트래킹] 백준 15649번 N과 M (1) [Java]

알고리즘/java 2025. 4. 17. 22:38

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BackTracking {

	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());
		boolean[] visit = new boolean[n];

		int[] a = new int[m];
		
		backTracking(n, m, visit, 0, a);
		
	}
	
	public static void backTracking(int n, int m, boolean[] visit, int c, int[] a) {
		if(c == m) {
			StringBuilder sb = new StringBuilder();
			for (int i = 0; i < a.length; i++) {
				sb.append(a[i]);
				sb.append(" ");
			}
			sb.substring(0, sb.length() - 1);
			System.out.println(sb);
			return;
		}
		for (int i = 0; i < n; i++) { // 0, 1, 2, 3
			if(!visit[i]) {
				visit[i] = true;
				a[c] = i + 1;
				backTracking(n, m, visit, c + 1, a);
				visit[i] = false;
			}
		}
	}

}

 

백트래킹의 기초 문제.

조건에 만족하는 결과가 나왔을 때 return 해줘야 하는데

해주질 않아서 다른 결과가 나와 한참 고민했다.