
-Code
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;
public class BOJ15650 {
static Deque<Integer> nums = new ArrayDeque<>();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
// 백트랙킹 로직 시작
backtracking(0, n, m);
}
private static void backtracking(int start, int length, int cnt) {
// 현제 nums의 크기와 필요 갯수가 같다면 출력
if (nums.size() == cnt) {
printNums();
return;
}
// visited를 돌면서 false인 경우 nums에 넣고 돌아감
for (int i = start; i < length; i++) {
// 현재수 추가
nums.addLast(i + 1);
// 백트래킹으로 재귀
backtracking(i + 1, length, cnt);
// 현재 수 제거
nums.pollLast();
}
}
// 출력
private static void printNums() {
StringBuilder sb = new StringBuilder();
for (int num : nums) {
sb.append(num).append(" ");
}
System.out.println(sb);
}
}
이전에 풀었던 n과 m (1)을 참고하여 코드를 짜다가 for문의 시작점을 바꾸면 될 거 같다고 생각을 했습니다. 처음에는 visited에 너무 신경을 쓰기도 하고 start라는 변수에 이것저것 넣어서 하다가 이상한 코드가 되었습니다. 그래서 찾아보니 start를 가지고 print문에 들어가는 걸 비교하다 보니 start값이 변동이 되면 이상한 값이 출력되는 거라 덱을 사용하고 그 크기에 맞춰서 출력하도록 해서 해결했습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 15652번 N과 M (4) (0) | 2025.12.28 |
|---|---|
| [백준/Java] 15651번 N과 M (3) (0) | 2025.12.28 |
| [백준/Java] 2447번 별 찍기 - 10 (0) | 2025.12.28 |
| [백준/Java] 2346번 풍선 터뜨리기 (0) | 2025.12.28 |
| [백준/Java] 4779번 칸토어 집합 (0) | 2025.12.28 |