본문 바로가기
Coding Test/Algorithms

[Baekjoon] 15649. N과 M (1)/Java - Silver3

by The Future Engineer, Lucy 2024. 9. 29.

❓문제

https://www.acmicpc.net/problem/15649

📌유형

Backtracking

✍🏻풀이

방문한 숫자가 아니라면 true로 바꾼 후 result에 삽입.
result의 길이가 m과 같아지면 출력 후 return하고 result에서 제일 마지막 숫자를 제거.
이를 n까지 반복.

💻코드

import java.util.*;
import java.io.*;

public class Main {

    static int n;
    static int m;
    static boolean[] visited;
    static ArrayList<Integer> result = new ArrayList<>();
    static BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); // 입력

    static void backtracking() {
        if (result.size() == m) {
            for (int i = 0; i < m; i++) System.out.print(String.valueOf(result.get(i)) + " ");
            System.out.println();
            return;
        }

        for (int i = 1; i <= n; i++) {
            if (!visited[i]) {
                visited[i] = true;
                result.add(i);
                backtracking();
                visited[i] = false;
                result.remove(result.size()-1);
            }
        }
    }

    public static void main(String[] args) throws IOException {

        StringTokenizer st = new StringTokenizer(r.readLine());

        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());

        visited = new boolean[n + 1];
        Arrays.fill(visited, false);

        backtracking();
    }
}