[10974] 모든 순열
카테고리: BOJ
[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;
}
}
}
}
댓글 남기기