[10974] 모든 순열

Update:     Updated:

카테고리:

태그:

[Silver III] 모든 순열 - 10974

문제 링크

성능 요약

메모리: 74456 KB, 시간: 1196 ms

분류

브루트포스 알고리즘, 백트래킹

문제 설명

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

입력

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

출력

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

아이디어

순열을 구하는 코드만 작성하면 되는 간단한 문제다.
다만, 자바에서 순열 관련 라이브러리가 없다는 것이 아쉽다.

답안코드

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        int[] arr = IntStream.range(1, n + 1).toArray();

        permutation(arr, new int[n], new boolean[arr.length], 0, n);
    }

    public static void permutation(int[] source, int[] dest, boolean[] visited, int depth, int r) {
        if(depth == r){
            String line = Arrays.stream(dest)
                    .mapToObj(i -> String.valueOf(i))
                    .collect(Collectors.joining(" "));
            System.out.println(line);
            return;
        }
        for (int i = 0; i < source.length; i++) {
            if (!visited[i]) {
                visited[i] = true;
                dest[depth] = source[i];
                permutation(source, dest, visited, depth + 1, r);
                visited[i] = false;
            }
        }
    }
}

BOJ 카테고리 내 다른 글 보러가기

댓글 남기기