💡순열(Permutation) : 서로 다른 n개의 원소에서 r개를 중복없이 순서에 상관있게 선택하는 혹은 나열하는 것을 순열(permutation)이라고 한다. (나무위키) //nPr public static void main(String[] args) { Scanner sc = new Scanner(System.in); N = sc.nextInt(); R = sc.nextInt(); input = new int[N]; numbers = new int[R]; isSelected = new boolean[N]; // 방문 여부를 체크하기 위함 for (int i = 0; i < N; i++) { input[i] = sc.nextInt(); } permutation(0); } private static v..
💡 문제 1182번: 부분수열의 합 문제 N개의 정수로 이루어진 수열이 있을 때, 크기가 양수인 부분수열 중에서 그 수열의 원소를 다 더한 값이 S가 되는 경우의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. 출력 첫째 줄에 합이 S가 되는 부분수열의 개수를 출력한다. 예제 입력 1 5 0 -7 -3 -2 5 8예제 출력 1 1 💡 접근 방법 S가 0일때는 sum=0의 초기화와 겹치므로 신경써줘야한다 부분집합으로 풀면 쉽게 풀 수 있음 🤦♀️ My Solution package 순열조..
💡 문제 2003번: 수들의 합 2 문제 N개의 수로 된 수열 A[1], A[2], …, A[N] 이 있다. 이 수열의 i번째 수부터 j번째 수까지의 합 A[i] + A[i+1] + … + A[j-1] + A[j]가 M이 되는 경우의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다. 출력 첫째 줄에 경우의 수를 출력한다. 예제 입력 1 4 2 1 1 1 1예제 출력 1 3 💡 접근 방법 🤦♀️ My Solution import java.io.BufferedReader; import ..
💡 문제 10974번: 모든 순열 문제 N이 주어졌을 때, 1부터 N까지의 수로 이루어진 순열을 사전순으로 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 N(1 ≤ N ≤ 8)이 주어진다. 출력 첫째 줄부터 N!개의 줄에 걸쳐서 모든 순열을 사전순으로 출력한다. 예제 입력 1 3예제 출력 1 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 💡 접근 방법 그냥 순열 🤦♀️ My Solution package 순열조합; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class BJ_10974 { static int N; static boolean check[..