Development/CodingTest
[์์ด] Swap์ ์ด์ฉํ ์์ด
Kirok Kim
2021. 12. 23. 20:52
๋ฐฐ์ด์ ์ฒซ ๊ฐ๋ถํฐ ์์๋๋ก ํ๋์ฉ ๋ฐ๊พธ๋ฉฐ ๋ชจ๋ ๊ฐ์ ํ ๋ฒ์ฉ swap
depth๋ฅผ ๊ธฐ์ค ์ธ๋ฑ์ค๋ก ํ์ฌ depth๋ณด๋ค ์ธ๋ฑ์ค๊ฐ ์์ ๊ฐ๋ค์
๊ทธ๋๋ก ๊ณ ์ ํ๊ณ depth๋ณด๋ค ์ธ๋ฑ์ค๊ฐ ํฐ ๊ฐ๋ค๋ง ๊ฐ์ง๊ณ ๋ค์ swap
์์๊ฐ ๋ณด์ฅ๋์ง ์์ ๋ง์ง๋ง 321,312 ๋ถ๋ถ
public class Permutation {
public static void main(String[] args) {
int n = 3;
int[] arr = {1, 2, 3};
int[] output = new int[n];
//boolean[] visited = new boolean[n];
// visited๋ฅผ ์ด์ฉํ ์์ด์์ ์ค๋ช
์์
// perm(arr, output, visited, 0, n, 3);
// System.out.println();
permutation(arr, 0, n, 3);
}
// ์์ ์์ด n ๊ฐ์ค์์ r ๊ฐ๋ฅผ ๋ฝ๋ ๊ฒฝ์ฐ
// ์ฌ์ฉ ์์: permutation(arr, 0, n, 3);
static void permutation(int[] arr, int depth, int n, int r) {
if (depth == r) {
print(arr, r);// 3๊ฐ ๋ฝ์ ๋ ์ถ๋ ฅ
return;
}
for (int i=depth; i<n; i++) {
swap(arr, depth, i); // ์ฌ๊ธฐ์ ์ค์ง์ ์ผ๋ก ๋ฐ๋์ด์ง
permutation(arr, depth + 1, n, r); //์ฌ๊ท ํจ์ ํธ์ถ
swap(arr, depth, i); // ๋ฐ๊พผ ๊ฒ์ ์ ์์น
}
}
static void swap(int[] arr, int depth, int i) { // ์์น ๋ฐ๊พธ๋ ๋ฉ์๋
int temp = arr[depth]; // ์๋ ์๋ ์ซ์ ์์ ๋ณ์์ ์ ์ฅ
arr[depth] = arr[i]; // depth๊ฐ 1์ด๊ณ i๊ฐ 2์ผ๋ ์ฒ์ ๋ฐ๋
arr[i] = temp; // ์๋ฆฌ๋ฅผ ๋ฐ๊ฟ
}
static void print(int[] arr, int r) { // ์ถ๋ ฅ ๋ฉ์๋
for (int i = 0; i < r; i++)
System.out.print(arr[i] + " ");
System.out.println();
}
}
//๊ฒฐ๊ณผ
//๊ทธ๋ฆผ๊ณผ ๊ฐ์
1 2 3 // ๊ทธ๋๋ก ์ถ๋ ฅ
1 3 2 // ๋ ์๋ฆฌ ๋ค๋ฐ๊ฟ์ ์ถ๋ ฅ
2 1 3 // ์ฒซ ์๋ฆฌ์ ๋๋ฒ์งธ ์๋ฆฌ ๋ฐ๊พธ๊ณ ์ถ๋ ฅ
2 3 1 // ๋ ์๋ฆฌ ๋ค๋ฐ๊ฟ์ ์ถ๋ ฅ
3 2 1 // ์ฒซ ์๋ฆฌ์ ๋๋ฒ์งธ ์๋ฆฌ ๋ฐ๊พธ๊ณ ์ถ๋ ฅ
3 1 2 // ๋ ์๋ฆฌ ๋ค๋ฐ๊ฟ์ ์ถ๋ ฅ
์ถ์ฒ : https://bcp0109.tistory.com/14
์์ด Permutation (Java)
์์ด ์ฐ์ต ๋ฌธ์ ์์ด์ด๋ n ๊ฐ์ ๊ฐ ์ค์์ r ๊ฐ์ ์ซ์๋ฅผ ๋ชจ๋ ์์๋๋ก ๋ฝ๋ ๊ฒฝ์ฐ๋ฅผ ๋งํฉ๋๋ค. ์๋ฅผ ๋ค์ด [1, 2, 3] ์ด๋ผ๋ 3 ๊ฐ์ ๋ฐฐ์ด์์ 2 ๊ฐ์ ์ซ์๋ฅผ ๋ฝ๋ ๊ฒฝ์ฐ๋ [1, 2] [1, 3] [2, 1] [2, 3] [3,
bcp0109.tistory.com
๋ฐ์ํ