1. ์์ด Permutation
- ๊ธธ์ด๊ฐ n๊ฐ์ธ ๋ฐฐ์ด์์ r๊ฐ์ ์์๋ฅผ ์ฐจ๋ก๋ก ๋ฝ์ ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค์์ ๋ ๊ฐ๋ฅํ ๋ชจ๋ ๋ฐฐ์ด(์ค๋ณต์ ์ธ)
→ ์์ด, ์ค๋ณต ์์ด, ์กฐํฉ, ์ค๋ณต์กฐํฉ ๋ชจ๋ n๊ฐ์์ r๊ฐ๋ฅผ ๋ฝ๋๋ค๋ ์ ์์ ๋์ผ - ์์ด์ ์ ์์์๋ ์ ๋ ฌ. ์์๊ฐ ์๋ค๋ ๊ฒ์ด ํน์ง
public class AlgorithmStudy {
public static void permutation(int[] arr, int[] out, boolean[] visited, int depth, int r){
if(depth == r){
for(int num: out) System.out.print(num);
System.out.println();
return;
}
for(int i=0; i<arr.length; i++){
if(!visited[i]){
visited[i] = true;
out[depth] = arr[i];
permutation(arr, out, visited, depth+1, r);
visited[i] = false;
}
}
}
public static void main(String[] args){
int[] arr = {1, 2, 3};
int r = 2;
permutation(arr, new int[r], new boolean[arr.length], 0, r);
}
}
→ ๊ฒฐ๊ณผ : 1 2 / 1 3 / 2 1 / 2 3 / 3 1 / 3 2
2. ์ค๋ณต ์์ด
- ์๋ก ๋ค๋ฅธ n๊ฐ์์ ์ค๋ณต์ด ๊ฐ๋ฅํ๊ฒ r๊ฐ๋ฅผ ๋ฝ์์ ์ ๋ ฌํ๋ ๊ฒฝ์ฐ์ ์
- ์์๊ฐ ์๋ค๋ ์ ์์ ์์ด๊ณผ ๋์ผ. ๊ฐ์ ์์๋ฅผ ์ค๋ณตํด์ ๋ฝ์ ์ ์๋ค๋ ์ ์์ ์ฐจ์ด
→ ์์ด ์ฝ๋์์ ์ค๋ณต๋ฐฉ์ง๋ฅผ ์ํด ์ฌ์ฉํ๋ visited ๋ถ๋ถ์ ์ ๊ฑฐํ๋ฉด ๋๋ค.
public class AlgorithmStudy {
public static void permutation(int[] arr, int[] out, int depth, int r){
if(depth == r){
for(int num: out) System.out.print(num);
System.out.println();
return;
}
for(int i=0; i<arr.length; i++){
out[depth] = arr[i];
permutation(arr, out, depth+1, r);
}
}
public static void main(String[] args){
int[] arr = {1, 2, 3};
int r = 2;
permutation(arr, new int[r], 0, r);
}
}
→ ๊ฒฐ๊ณผ : 1 1 / 1 2 / 1 3 / 2 1 / 2 2 / 2 3 / 3 1 / 3 2 / 3 3
3. ์กฐํฉ Combination
- ์๋ก ๋ค๋ฅธ n๊ฐ์์ ์์ ์์ด r๊ฐ๋ฅผ ๋ฝ๋ ๊ฒฝ์ฐ์ ์(์ค๋ณต์ ์ธ)
→[1, 2] ์ [2, 1]์ ๊ฐ์ ๊ฒ์ผ๋ก ์ทจ๊ธ โท ์ด ๊ฒฝ์ฐ [1, 2]๋ง ์นด์ดํ - ์์ ์๊ด์ด ์๊ณ , ์ค๋ณต๋ ์๊ธฐ ๋๋ฌธ์ ์ ํ๋ ์์๋ฅผ ๋ฐ๋ก ์ ์ฅํ์ง ์๊ณ ,
์์๋ค๊ณผ visited๋ง ์ด์ฉํ์ฌ ๋ฐฉ๋ฌธํ ์์๋ค์ ์์๋๋ก ํ์ธํ๋ฉด ๊ณง ์ ํ๋ ์กฐํฉ
public class AlgorithmStudy {
public static void combination(int[] arr, boolean[] visited, int start, int depth, int r){
if(depth == r){
for(int i=0; i<arr.length; i++){
if(visited[i]) System.out.print(arr[i]);
}
System.out.println();
return;
}
for(int i=start; i<arr.length; i++){
if(!visited[i]){
visited[i] = true;
combination(arr, visited, i+1, depth+1, r);
visited[i] = false;
}
}
}
public static void main(String[] args){
int[] arr = {1, 2, 3};
int r = 2;
combination(arr, new boolean[arr.length], 0, 0, r);
}
}
→ ๊ฒฐ๊ณผ : 1 2 / 1 3 / 2 3
4. ์ค๋ณต ์กฐํฉ
- ์๋ก ๋ค๋ฅธ n๊ฐ์์ ์์ ์์ด, ์ค๋ณต์ด ๊ฐ๋ฅํ๊ฒ r๊ฐ๋ฅผ ๋ฝ๋ ๊ฒฝ์ฐ์ ์
- ์์ ์์ด ๋ฝ๋ ์กฐํฉ๊ณผ ๋์ผํ์ง๋ง, ์ค๋ณต์ด ๊ฐ๋ฅํ๋ค๋ ์ ์์ ์ฐจ์ด(์ฆ, ์ด๋ฏธ ๋ฝ์ ๊ฒ์ ๋ ๋ฝ์ ์ ์์)
→ ์กฐํฉ ์ฝ๋์์ ์ค๋ณต๋ฐฉ์ง๋ฅผ ์ํด์ฌ์ฉํ๋ visited ๋ถ๋ถ์ ์ ๊ฑฐํ๋ฉด ๋๋ค.
→ ์ค๋ณต์ด ๊ฐ๋ฅํ๋ฏ๋ก ์ ํํ ์์๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด ํ์
public class AlgorithmStudy {
public static void combination(int[] arr, int[] out, int start, int depth, int r){
if(depth == r){
for(int num : out) System.out.print(num);
System.out.println();
return;
}
for(int i=start; i<arr.length; i++){
out[depth] = arr[i];
combination(arr, out, i, depth+1, r);
}
}
public static void main(String[] args){
int[] arr = {1, 2, 3};
int r = 2;
combination(arr, new int[r], 0, 0, r);
}
}
๊ฒฐ๊ณผ → 1 1 / 1 2 / 1 3 / 2 2 / 2 3 / 3 3
์ฐธ๊ณ ) https://minhamina.tistory.com/37
[Java] ์์ด Permutation
์์ด ์์ด์ด๋ n ๊ฐ์ ๊ฐ ์ค์์ r ๊ฐ์ ์ซ์๋ฅผ ๋ชจ๋ ์์๋๋ก ๋ฝ๋ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค. ์ํ์์ ์์ด์ ์๋ก ๋ค๋ฅธ n๊ฐ์ ์์์์ r๊ฐ๋ฅผ ๋ฝ์ํ ์ค๋ก ์ธ์ฐ๋ ๊ฒฝ์ฐ์ ์์ด๋ค. ์์ด์ ๊ฐ์๋ n์ ๊ณ์น
minhamina.tistory.com
์ฐธ๊ณ ) https://bcp0109.tistory.com/14
์์ด Permutation (Java)
์์ด์ฐ์ต ๋ฌธ์ ์์ด์ด๋ n ๊ฐ์ ๊ฐ ์ค์์ r ๊ฐ์ ์ซ์๋ฅผ ๋ชจ๋ ์์๋๋ก ๋ฝ๋ ๊ฒฝ์ฐ๋ฅผ ๋งํฉ๋๋ค. ์๋ฅผ ๋ค์ด [1, 2, 3] ์ด๋ผ๋ 3 ๊ฐ์ ๋ฐฐ์ด์์ 2 ๊ฐ์ ์ซ์๋ฅผ ๋ฝ๋ ๊ฒฝ์ฐ๋ [1, 2] [1, 3] [2, 1] [2, 3] [3, 1] [3,
bcp0109.tistory.com
'CS > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] DFS์ BFS (0) | 2023.01.16 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ํ์ ์๊ณ ๋ฆฌ์ฆ (0) | 2023.01.16 |
[์๊ณ ๋ฆฌ์ฆ] ํฌํฌ์ธํฐ (0) | 2023.01.16 |
[์๊ณ ๋ฆฌ์ฆ] #5. ํต์ ๋ ฌ (0) | 2023.01.15 |
[์๊ณ ๋ฆฌ์ฆ] #4. ์ฝ์ ์ ๋ ฌ (0) | 2023.01.15 |