본문 바로가기
Beakjoon&프로그래머스/Java

[백준/Java] 15651번 N과 M (3)

by 현장 2025. 12. 28.

-Code

import java.util.*;

public class BOJ15651 {
    static Deque<Integer> nums = new ArrayDeque<>();
    static StringBuilder answer = new StringBuilder();

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        int m = sc.nextInt();
        // 백트레킹 로직 시작
        backtracking(n, m);
        System.out.println(answer);
    }

    private static void backtracking(int length, int checkCnt) {
        // 모은 숫자의 갯수가 뽑아야할 갯수와 같으면 출력
        if (nums.size() == checkCnt){
            printCombi();
            return;
        }
        // 숫자들을 돌면서 조합 찾기
        for (int i = 1; i <= length; i++) {
            // 중복 허용이므로 길이만큼 담기
            nums.add(i);
            backtracking(length, checkCnt);
            nums.pollLast();
        }
    }

    private static void printCombi() {
        StringBuilder sb = new StringBuilder();
        for (int num : nums){
            sb.append(num).append(" ");
        }
        answer.append(sb).append("\n");
    }
}

시간 초과가 나서 모든 입력을 answer라는 static StringBuilder를 생성에 담고 한번에 출력하도록 하여 통과했습니다.