[백준] 15652 N과 M(4)
https://www.acmicpc.net/problem/15652
15652번: N과 M (4)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
N이 3~4보다 커지면 적극적으로 StringBuilder 사용하는 걸 고려해봐야겠다. 이 문제도 N과 M 시리즈이다. 중복이 가능한 순열 중에서 중복을 허용하고, 비내림차순으로 구성하면 되는 문제이다.
문제 및 입출력
예제
코드
import java.util.Scanner;
public class Main
{
static StringBuilder sb = new StringBuilder();
// n개의 숫자 중 m개를 뽑는 사전식 순열
public static void permutation(String value, int temp, boolean[] visit, int n, int m, int cnt)
{
if(cnt==m)
{
sb.append(value + "\n");
return;
}
for(int i=1; i<=n ; i++)
{
if(i>=temp)
{
// 첫 번째 값을 넣을 때와 그 외의 경우를 나눠서 value 설정
if(cnt==0)
{
permutation(i + "", i, visit, n, m, cnt+1);
}
else
{
permutation(value + " " + i, i, visit, n, m, cnt+1);
}
}
}
}
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
boolean[] visit = new boolean[n];
permutation("", 0, visit, n, m, 0);
System.out.println(sb.toString());
sc.close();
}
}