문제
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
풀이
바로 직전에 순열을 사용한 문제를 풀어서 나름 수월하게 푼 문제였다.
주의할 점은 한번 백트래킹을 돌릴 때마다 visited뿐만 아니라 sb도 초기화 해줘야 한다는 점이다.
정답 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static int N;
static boolean[] visited;
static StringBuilder ans = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
visited = new boolean[N+1];
permutation(0, new StringBuilder());
System.out.println(ans);
}
static void permutation(int index, StringBuilder sb) {
if (index == N) {
sb.delete(sb.length()-1, sb.length()); // 공백 제거
ans.append(sb).append('\n');
return;
}
for (int i = 1; i <= N; i++) {
if (!visited[i]) {
visited[i] = true;
int len = sb.length();
sb.append(i);
permutation(index + 1, sb.append(" "));
sb.delete(len, sb.length());
visited[i] = false;
}
}
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 28215: 대피소 (JAVA) (0) | 2025.04.07 |
---|---|
[백준] 1717: 집합의 표현 (JAVA) (0) | 2024.10.11 |
[백준] 10026: 적록색약 (JAVA) (0) | 2024.10.06 |
[백준] 21921: 블로그 (JAVA) (1) | 2024.09.28 |
[백준] 1238: 파티 (JAVA) (1) | 2024.09.25 |