[Algorithm - Baekjoon] 10974번 모든 순열

nunu·2023년 6월 26일
0

Algorithm

목록 보기
15/142

문제

N이 주어졌을 때, 1부터 N까지의 수로 이루어진 순열을 사전순으로 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 N(1 ≤ N ≤ 8)이 주어진다.

출력

첫째 줄부터 N!개의 줄에 걸쳐서 모든 순열을 사전순으로 출력한다.

예제1-입력

3

예제1 - 출력

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

n과 m 문제 시리즈에서 구현했던 방식을 사용해 해결하였다.
다음 순열에서 쓴 방식을 마지막 순서의 순열까지 반복해도 된다고 하는데 시간이 남으면 한 번 해보는 것도 좋을 것 같다.

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

public class Main {
    static int n;
    static int[] result;
    static boolean[] picked;
    static BufferedWriter bw;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine());
        n = Integer.parseInt(st.nextToken());
        

        picked = new boolean[n + 1];
        result = new int[n];
        bw = new BufferedWriter(new OutputStreamWriter(System.out));
        picking(0);
        bw.flush();
        bw.close();
    }

    static void picking(int cnt) throws IOException {
        if (cnt == n) {
            for (int i = 0; i < n; i++) {
                bw.append(result[i] + " ");
            }
            bw.write("\n");
            return;
        }

        for (int i = 1; i <= n; i++) {
            if (!picked[i]) {
                picked[i] = true;
                result[cnt] = i;
                picking(cnt + 1);
                picked[i] = false;
            }
        }
    }
}
profile
Hello, I'm nunu

0개의 댓글