diff --git a/Blackjack.java b/kikat/Brute-Force/Blackjack.java similarity index 100% rename from Blackjack.java rename to kikat/Brute-Force/Blackjack.java diff --git a/Bulk.java b/kikat/Brute-Force/Bulk.java similarity index 100% rename from Bulk.java rename to kikat/Brute-Force/Bulk.java diff --git a/Director.java b/kikat/Brute-Force/Director.java similarity index 100% rename from Director.java rename to kikat/Brute-Force/Director.java diff --git a/DivideAndMerge.java b/kikat/Brute-Force/DivideAndMerge.java similarity index 100% rename from DivideAndMerge.java rename to kikat/Brute-Force/DivideAndMerge.java diff --git a/DomitoryFloor.java b/kikat/Brute-Force/DomitoryFloor.java similarity index 100% rename from DomitoryFloor.java rename to kikat/Brute-Force/DomitoryFloor.java diff --git a/Doubles.java b/kikat/Brute-Force/Doubles.java similarity index 100% rename from Doubles.java rename to kikat/Brute-Force/Doubles.java diff --git a/OneNumber.java b/kikat/Brute-Force/OneNumber.java similarity index 100% rename from OneNumber.java rename to kikat/Brute-Force/OneNumber.java diff --git a/README.md b/kikat/Brute-Force/README.md similarity index 100% rename from README.md rename to kikat/Brute-Force/README.md diff --git a/RepaintChessBoard.java b/kikat/Brute-Force/RepaintChessBoard.java similarity index 100% rename from RepaintChessBoard.java rename to kikat/Brute-Force/RepaintChessBoard.java diff --git a/ReverseGuGuDan.java b/kikat/Brute-Force/ReverseGuGuDan.java similarity index 100% rename from ReverseGuGuDan.java rename to kikat/Brute-Force/ReverseGuGuDan.java diff --git a/kikat/Permutation and Combination/AllPermutation.java b/kikat/Permutation and Combination/AllPermutation.java new file mode 100644 index 0000000..5609f77 --- /dev/null +++ b/kikat/Permutation and Combination/AllPermutation.java @@ -0,0 +1,40 @@ +package algorithm; + +import java.util.Scanner; + +public class AllPermutation { + public static StringBuilder stringBuilder = new StringBuilder(); + public static int[] arr; + public static boolean[] isVisited; + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + + int n = scanner.nextInt(); + + arr= new int[n]; + isVisited = new boolean[n]; + + dfs(n, 0); + System.out.println(stringBuilder); + } + + public static void dfs(int n , int depth) { + if(depth == n) { + for(int i : arr) { + stringBuilder.append(i).append(' '); + } + stringBuilder.append('\n'); + return; + } + + for(int i = 0; i < n; i++) { + if(!isVisited[i]) { + isVisited[i] = true; + arr[depth] = i + 1; + dfs(n, depth + 1); + isVisited[i] = false; + } + } + } +} diff --git a/kikat/Permutation and Combination/Lotto.java b/kikat/Permutation and Combination/Lotto.java new file mode 100644 index 0000000..6dacacf --- /dev/null +++ b/kikat/Permutation and Combination/Lotto.java @@ -0,0 +1,48 @@ +package algorithm; + +import java.util.Scanner; + +public class Lotto { + public static int[] arr; + public static boolean[] isVisited; + public static int k; + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + + while(true) { + k = scanner.nextInt(); + + if(k == 0) { + break; + } + + arr = new int[k]; + isVisited = new boolean[k]; + + for(int i = 0; i < k; i++) { + arr[i] = scanner.nextInt(); + } + lotto(0, 0); + System.out.println(); + } + } + + public static void lotto(int start, int depth) { + if(depth == 6) { + for(int i = 0; i < k; i++) { + if(isVisited[i]) { + System.out.print(arr[i] + " "); + } + } + System.out.println(); + return; + } + + for(int i = start; i < k; i++) { + isVisited[i] = true; + lotto(i + 1, depth + 1); + isVisited[i] = false; + } + } +} diff --git a/kikat/Permutation and Combination/NandMFour.java b/kikat/Permutation and Combination/NandMFour.java new file mode 100644 index 0000000..bea77a0 --- /dev/null +++ b/kikat/Permutation and Combination/NandMFour.java @@ -0,0 +1,34 @@ +package algorithm; + +import java.util.Scanner; + +public class NandMFour { + public static int[] arr; + public static StringBuilder stringBuilder = new StringBuilder(); + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + + int n = scanner.nextInt(); + int m = scanner.nextInt(); + + arr = new int[m]; + dfs(n, m, 0, 0); + System.out.println(stringBuilder); + } + + public static void dfs(int n , int m, int start, int depth) { + if(depth == m) { + for(int i : arr) { + stringBuilder.append(i).append(' '); + } + stringBuilder.append('\n'); + return; + } + + for(int i = start; i < n; i++) { + arr[depth] = i + 1; + dfs(n, m, i, depth + 1); + } + } +} diff --git a/kikat/Permutation and Combination/NandMOne.java b/kikat/Permutation and Combination/NandMOne.java new file mode 100644 index 0000000..ebee126 --- /dev/null +++ b/kikat/Permutation and Combination/NandMOne.java @@ -0,0 +1,42 @@ +package algorithm; + +import java.util.Scanner; + +public class NandMOne { + + static boolean[] isVisited; + static int[] arr; + static StringBuilder stringBuilder = new StringBuilder(); + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + int n = scanner.nextInt(); + int m = scanner.nextInt(); + + isVisited = new boolean[n]; + arr = new int[m]; + + dfs(n,m, 0); + + System.out.println(stringBuilder); + } + + public static void dfs(int n, int m, int depth) { + if(depth == m) { + for(int i : arr) { + stringBuilder.append(i).append(' '); + } + stringBuilder.append('\n'); + return; + } + + for(int i = 0; i < n; i++) { + if(!isVisited[i]) { + isVisited[i] = true; + arr[depth] = i + 1; + dfs(n, m, depth + 1); + isVisited[i] = false; + } + } + } +} diff --git a/kikat/Permutation and Combination/NandMThree.java b/kikat/Permutation and Combination/NandMThree.java new file mode 100644 index 0000000..5d815ed --- /dev/null +++ b/kikat/Permutation and Combination/NandMThree.java @@ -0,0 +1,35 @@ +package algorithm; + +import java.util.Scanner; + +public class NandMThree { + public static int[] arr; + public static StringBuilder stringBuilder = new StringBuilder(); + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + + int n = scanner.nextInt(); + int m = scanner.nextInt(); + + arr = new int[m]; + + dfs(n, m, 0); + System.out.println(stringBuilder); + } + + public static void dfs(int n, int m, int depth) { + if(m == depth) { + for(int i : arr) { + stringBuilder.append(i).append(' '); + } + stringBuilder.append('\n'); + return; + } + + for(int i = 0; i < n; i++) { + arr[depth] = i + 1; + dfs(n, m, depth + 1); + } + } +} diff --git a/kikat/Permutation and Combination/NandMTwo.java b/kikat/Permutation and Combination/NandMTwo.java new file mode 100644 index 0000000..44341cd --- /dev/null +++ b/kikat/Permutation and Combination/NandMTwo.java @@ -0,0 +1,36 @@ +package algorithm; + +import java.util.Scanner; + +public class NandMTwo { + public static int[] arr; + public static StringBuilder stringBuilder = new StringBuilder(); + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + + int n = scanner.nextInt(); + int m = scanner.nextInt(); + + arr = new int[m]; + + dfs(n, m, 0, 0); + + System.out.println(stringBuilder); + } + + public static void dfs(int n, int m, int start, int depth) { + if(depth == m) { + for(int i : arr) { + stringBuilder.append(i).append(' '); + } + stringBuilder.append('\n'); + return; + } + + for(int i = start; i < n; i++) { + arr[depth] = i + 1; + dfs(n, m, i + 1, depth + 1); + } + } +} \ No newline at end of file diff --git a/kikat/Permutation and Combination/NextPermutation.java b/kikat/Permutation and Combination/NextPermutation.java new file mode 100644 index 0000000..867b9ea --- /dev/null +++ b/kikat/Permutation and Combination/NextPermutation.java @@ -0,0 +1,52 @@ +package algorithm; + +import java.util.Scanner; + +public class NextPermutation { + public static int[] arr; + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + + int n = scanner.nextInt(); + + arr = new int[n]; + + for (int i = 0; i < n; i++) { + arr[i] = scanner.nextInt(); + } + + if(nextPermutation()) { + for(int i : arr) { + System.out.print(i + " "); + } + } else { + System.out.println("-1"); + } + + } + + private static boolean nextPermutation() { + int a = arr.length - 1; + while(a > 0 && arr[a - 1] >= arr[a]) a--; + if(a <= 0) return false; + + int b = arr.length - 1; + while(arr[a - 1] >= arr[b]) b--; + + int temp = arr[a - 1]; + arr[a - 1] = arr[b]; + arr[b] = temp; + + int start = a; + int end = arr.length - 1; + while(start < end) { + temp = arr[start]; + arr[start] = arr[end]; + arr[end] = temp; + start++; + end--; + } + return true; + } +} diff --git a/kikat/Permutation and Combination/PreviousPermutation.java b/kikat/Permutation and Combination/PreviousPermutation.java new file mode 100644 index 0000000..cf893e5 --- /dev/null +++ b/kikat/Permutation and Combination/PreviousPermutation.java @@ -0,0 +1,56 @@ +package algorithm; + +import java.util.Scanner; + +public class PreviousPermutation { + public static int[] arr; + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + + int n = scanner.nextInt(); + + arr = new int[n]; + + for (int i = 0; i < n; i++) { + arr[i] = scanner.nextInt(); + } + + if(previousPermutation()) { + for(int i : arr) { + System.out.print(i + " "); + } + } else { + System.out.println("-1"); + } + + + } + + public static boolean previousPermutation() { + int a = arr.length - 1; + while(a > 0 && arr[a - 1] <= arr[a]) a--; + if(a <= 0) { + return false; + } + + // a - 1 이랑 그 다음으로 큰 수랑 바뀌어야 함. + + int b = arr.length - 1; + while(b > 0 && arr[b] >= arr[a - 1]) b--; + + int temp = arr[b]; + arr[b] = arr[a - 1]; + arr[a - 1] = temp; + + int start = a; + int end = arr.length - 1; + while(start < end) { + temp = arr[start]; + arr[start] = arr[end]; + arr[end] = temp; + start++; + end--; + } + return true; + } +}