15649_N과 M (1) : 순열
15649번: N과 M (1)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Scanner;
import java.util.List;
public class Main {
static int N;
static int M;
public static void main(String[] args) throws Exception{
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
M = sc.nextInt();
List<Integer> num = new ArrayList<Integer>();
int[] ans = new int[M];
for(int i=1; i<=N; i++){
num.add(i);
}
int cnt = 0;
permutation(num, ans, cnt);
}
private static void permutation(List<Integer> num, int[] ans, int cnt){
if(cnt == M){
String str = Arrays.toString(ans).replaceAll("\\[", "");
str = str.replaceAll("\\]", "");
str = str.replace(",", "");
System.out.println(str);
return;
}
for(int i=0; i<num.size(); i++){
ans[cnt] = num.remove(i);
permutation(num, ans, cnt+1);
num.add(i, ans[cnt]);
}
}
}
15650_N과 M (2) : 조합
15650번: N과 M (2)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
import java.util.Scanner;
public class Main {
static int N;
static int M;
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
M = sc.nextInt();
int[] num = new int[N];
boolean[] checked = new boolean[N];
for(int i=0; i<N; i++){
num[i] = i+1;
}
makeset(num, checked, 0, 0);
}
private static void makeset(int[] num, boolean[] checked, int index, int cnt){
if(cnt == M){
for(int i=0; i<num.length; i++){
if(checked[i])
System.out.print(num[i]+" ");
}
System.out.println();
return;
}
if(index>=num.length){
if(cnt!=M) return;
}
checked[index] = true;
makeset(num, checked, index+1, cnt+1);
checked[index] = false;
makeset(num, checked, index+1, cnt);
}
}
15651_N과 M (3) : 중복 순열
15651번: N과 M (3)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
import java.util.List;
public class Main {
static int N;
static int R;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
R = Integer.parseInt(st.nextToken());
int[] num = new int[N];
List<Integer> ans = new ArrayList<>();
for(int i=0; i<num.length; i++){
num[i] = i+1;
}
permutation(num, ans);
System.out.print(sb);
}
private static void permutation(int[] num, List<Integer> ans) throws Exception{
if(ans.size() == R){
for(int i=0; i<ans.size(); i++){
sb.append(ans.get(i)).append(" ");
}
sb.append('\n');
return;
}
for(int i=0; i<num.length; i++){
ans.add(num[i]);
permutation(num, ans);
ans.remove(ans.size()-1);
}
}
}
15652_N과 M (4) : 중복 조합
15652번: N과 M (4)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int N;
static int R;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
R = Integer.parseInt(st.nextToken());
int[] num = new int[N];
int[] ans = new int[R];
for(int i=0; i<num.length; i++){
num[i] = i+1;
}
combination(num, ans, 0, 0, 0);
System.out.print(sb);
}
private static void combination(int[] num, int[] ans, int num_index, int ans_index, int cnt){
if(num_index >= N)
return;
if(cnt == R){
String str = "";
for(int i=0; i<ans.length; i++){
sb.append(ans[i]).append(" ");
}
sb.append('\n');
return;
}
ans[ans_index] = num[num_index];
combination(num, ans, num_index, ans_index+1, cnt+1);
combination(num, ans, num_index+1, ans_index, cnt);
}
}
순열 nPr
① 순열 : 순서O, 중복X ('중복'은 자기자신 포함 여부를 의미) 예) 1,2,3,4 중 2개 뽑는 경우 (1,2) (1,3) (1,4) (2,1) (2,3) (2,4) (3,1) (3,2) (3,4) (4,1) (4,2) (4,3) /* N : 총 숫자 개수(num.length)..
yeone2ee.tistory.com
조합 nCr
조합 : 순서X, 중복X ('중복'은 자기자신 포함 여부를 의미) 예) 1,2,3,4 중 2개 뽑는 경우 (1,2) (1,3) (1,4) (2,3) (2,4) (3,4) /* N : 총 숫자 개수(num.length) R : 숫자 중에서 뽑는 개수 (nCr에서 r을..
yeone2ee.tistory.com
'1d-1c > BOJ' 카테고리의 다른 글
15663~15666_ N과 M (9)~(12) (JAVA) (0) | 2020.11.13 |
---|---|
15654~15657_N과 M (5)~(8) (JAVA) (0) | 2020.11.11 |
4963_섬의 개수 (JAVA) (C++) (0) | 2020.11.09 |
1182_부분수열의 합 (JAVA) (0) | 2020.11.08 |
3273_두 수의 합 (JAVA) (0) | 2020.11.07 |