반응형
문제 출처: https://www.acmicpc.net/problem/10974
10974번: 모든 순열
N이 주어졌을 때, 1부터 N까지의 수로 이루어진 순열을 사전순으로 출력하는 프로그램을 작성하시오.
www.acmicpc.net
1. 문제 접근방식
먼저 숫자를 담을 배열 arr와 이미 사용한 숫자를 확인하기 위한 selected 배열을 선언하였다.
후에 selected 배열에서 한번 사용했던 숫자면 true로 변경해 주고 재귀의 방식으로 인자를 1 증가시킨 뒤 재호출한다.
이러한 방식을 통해 중복을 방지하여 출력하였다.
2. 내가 푼 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class boj10974 {
static int N;
static int[] arr;
static boolean[] selected;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
input();
rec_func(0);
System.out.println(sb.toString());
}
static void input() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
arr = new int[N];
selected = new boolean[N];
}
static void rec_func(int k) {
if (k == N) {
for (int i = 0; i < N; i++) {
sb.append(arr[i]).append(' ');
}
sb.append('\n');
}
for (int i = 0; i < N; i++) {
if (selected[i])
continue;
arr[k] = i + 1;
selected[i] = true;
rec_func(k + 1);
selected[i] = false;
}
}
}
반응형
'개인 공부 > Algorithm' 카테고리의 다른 글
[Baekjoon/백준] 11478 JAVA (0) | 2022.03.14 |
---|---|
[Baekjoon/백준] 17614 JAVA (0) | 2022.03.09 |
[Baekjoon/백준] 1120 JAVA (0) | 2022.03.08 |
[Baekjoon/백준] 1476 JAVA (0) | 2022.03.06 |
[Baekjoon/백준] 4796 JAVA (0) | 2021.08.27 |