package practice; import java.util.*; // Recursion + BackTracking 4ê°ì§ ê²½ì° ì íí // n = 5(í nodeìì ë»ì¹ë ë¸ëì¹ ì), r = 3(depth) public class Main7 { static int n, a[]; static boolean checked[]; // n^r(níì´r), ì¤ë³µ ìì´(1~5 ì¤ìì 3ê° ë½ìì ì¤ë³µ ê°ë¥, ìì 무ì ëì´) static void f1(int dep) { // depth를 ì´ëê¹ì§ ì§íí ê²ì¸ê° if (dep == 3) { for (int i = 0; i < 3; i++) { System.out.print(a[i]); } System.out.println(); return; } // ìë for문 ë§ì¼ë¡ n^rë² ëë¤ // ê°ì§ë¥¼ ëª ê°ë¡ ë»ì ê²ì¸ê° for (int i = 0; i < n; i++) { a[dep] = i + 1; f1(dep + 1); // ìë¡ì´ ë ¸ëìì ê°ì§ë¥¼ ë§ë ë¤. ê·¸ë 기 ë문ì ê°ì§ ìë§í¼ for문ì ëìì¼íë¤ } } // nPr, ìì´ (1~5 ì¤ìì 3ê° ë½ìì ì¤ë³µ ë¶ê°ë¥, ìì ìë ëì´) static void f2(int dep) { if (dep == 3) { for (int i = 0; i < 3; i++) { System.out.print(a[i]); } System.out.println(); return; } for (int i = 0; i < n; i++) { if (checked[i]) { continue; } checked[i] = true; a[dep] = i + 1; f2(dep + 1); checked[i] = false; } } // 기본ì ì¼ë¡ ìì´ì ìë¡ ë¤ë¥¸ ìë¤ì ìì ìê² ëì´ íë ê²ì´ì§ë§, nê°ì ì ì¤ìì ì¼ë¶ê° ê²¹ì¹ë ê²½ì° ìë¤ // ì´ ë ì를 ëì´íë ë°©ë². ì¦ ì¼ë¶ ì¤ë³µ ê°ë¥, ìì ìë ëì´. ì¬ê¸°ì ì´ ì«ìì ê°ìê° nê°ì´ê³ , ì¢ ë¥ë 4ê°, cnt[]ë 4ê°ì§ ì¢ ë¥ê° nê°ì¤ ëª ê°ì© ìëì§ static void f2Alpha(int dep) { if (dep == n) { for (int i = 0; i < 3; i++) { System.out.print(a[i]); } System.out.println(); return; } for (int i = 0; i < 4; i++) { if (cnt[i] == 0) { continue; } cnt[i]--; a[dep] = i + 1; f2(dep + 1); cnt[i]++; } } // nCr, ì¡°í© (1~5 ì¤ìì 3ê° ë½ìì ì¤ë³µ ë¶ê°ë¥, ìì ìë ëì´) static void f3(int dep, int start) { if (dep == 3) { for (int i = 0; i < 3; i++) { System.out.print(a[i]); } System.out.println(); return; } for (int i = start; i < n; i++) { a[dep] = i + 1; f3(dep + 1, i + 1); } } // nHr(n+r-1Cr), ì¤ë³µ ì¡°í© (1~5 ì¤ìì 3ê° ë½ìì ì¤ë³µ ê°ë¥, ìì ìë ëì´) static void f4(int dep, int start) { if (dep == 3) { for (int i = 0; i < 3; i++) { System.out.print(a[i]); } System.out.println(); return; } for (int i = start; i < n; i++) { a[dep] = i + 1; f4(dep + 1, i); } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); n = 5; a = new int[n]; checked = new boolean[n]; // f1(0); // f2(0); // f3(0, 0); f4(0, 0); } }