반응형
🔺 문제
10974번: 모든 순열
N이 주어졌을 때, 1부터 N까지의 수로 이루어진 순열을 사전순으로 출력하는 프로그램을 작성하시오.
www.acmicpc.net
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
import java.util.*;
import java.io.*;
public class Main {
static int N;
static int[] A, result;
static boolean[] visited;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
A = new int[N];
for(int i = 0 ; i < N ; i++) {
A[i] = i + 1;
}
result = new int[N];
visited = new boolean[N];
back(0);
System.out.println(sb);
}
private static void back(int depth) {
if(depth == N) {
for(int i : result) sb.append(i).append(" ");
sb.append("\n");
return;
}
for(int i = 0 ; i < N ; i++) {
if(!visited[i]) { // 중복 제거용
result[depth] = A[i];
visited[i] = true;
back(depth + 1);
visited[i] = false;
}
}
}
}
|
cs |
✅ 해결 아이디어
✔ 백트래킹
• Line 33 | if(!visited[i])
하는 이유 ⇨ 중복 제거용
- 이 처리를 안 하면 숫자 중복이 생긴다. (1 1 1) (1 1 2) (1 1 3) 이런 식으로...
🔺 다른 풀이들
- 나처럼 result 배열 만들지 않고, A[depth] = i + 1
이런 식으로 값 저장해서 사용하심
[Java] 백준 10974번
모든 순열
velog.io
💬 느낀 점
다른 조건 많은 문제 풀다가 이런 간단한 조건의 문제를 보니까
10분만에 풀었다... 감사합니다...
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
반응형
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 1309번: 동물원 (0) | 2023.08.29 |
---|---|
[백준/JAVA] 11931번: 수 정렬하기 4 (0) | 2023.08.29 |
[백준/JAVA] 6603번: 로또 (0) | 2023.08.26 |
[백준/JAVA] 15657번: N과 M (8) (0) | 2023.08.25 |
[백준/JAVA] 10971번: 외판원 순회 2 (0) | 2023.08.24 |