https://www.acmicpc.net/problem/10974
문제


풀이
순열을 출력하는 기본 문제이다
check 배열을 선언해서 해당 수를 사용했는지 판단하면서 재귀호출 한다
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;
public class Main {
static int N;
static int[] arr; // 출력할 배열
static boolean[] check; // 사용 여부 판단
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
N = Integer.parseInt(br.readLine());
arr = new int[N + 1];
check = new boolean[N + 1];
permu(0);
System.out.println(sb);
br.close();
}
private static void permu(int idx) {
// 배열의 사이즈가 N과 같아지면
if (idx == N) {
// 배열을 출력한다
for (int i = 0; i < N; i++) {
sb.append(arr[i]).append(" ");
}
sb.append("\n");
// 이전 idx로 돌아간다
return;
}
// 1~N 수를 사용
for (int i = 1; i <= N; i++) {
// 사용한 숫자라면 continue
if (check[i]) {
continue;
}
// i를 사용처리 함
check[i] = true;
// 배열에 i를 담아줌
arr[idx] = i;
// 배열의 다음 위치를 재귀 호출
permu(idx + 1);
// 모든 경우의 수를 돌았다면 i를 다시 false로 처리
check[i] = false;
}
}
}
결과
