1. 문제
2. 풀이
백트래킹의 가장 기본적인 유형인 순열 만들기 문제다. 집합의 요소를 사용했는지를 판단할 boolean 배열을 선언하여, 각 요소들의 사용여부를 변경해가며 순열을 만들면 해결할 수 있다.
다만 현재 문제는 조합(Combination)이 아닌 순열(Permutation)이므로, 백트래킹을 할 재귀 함수 내에서 시작지점은 항상 첫 요소로 설정해야 한다. 시작지점부터 앞서 선언한 boolean 배열을 통해 사용하지 않은 요소가 있다면 사용하여 재귀를 돌리고, 다시 사용하지 않겠다고 선언하여 다른 경우의 수를 체크하는 것이다.
3. 소스코드
더보기
public class Main {
static char[] line;
static void permutation(int len, String str, boolean[] visit) {
if (len == line.length) {
System.out.println(str);
return;
}
for (int i = 0, n = line.length; i < n; i++) {
if (visit[i]) continue;
visit[i] = true;
permutation(len + 1, str + line[i], visit);
visit[i] = false;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
for (int i = 1; i <= N; i++) {
line = br.readLine().toCharArray();
System.out.printf("Case # %d:\n", i);
permutation(0, "", new boolean[line.length]);
}
br.close();
}
}
반응형
'Algorithm > 문제풀이' 카테고리의 다른 글
[ 백준 20304 ] 비밀번호 제작 (0) | 2023.02.18 |
---|---|
[ 백준 9742 ] 순열 (0) | 2023.02.17 |
[ 백준 6148번 ] Bookshelf 2 (0) | 2023.02.13 |
[ 백준 2573 ] 빙산 (0) | 2023.02.13 |
[ 백준 16959 ] 체스판 여행 1 (0) | 2023.02.09 |