링크 → https://www.acmicpc.net/problem/15666
아영
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.StringTokenizer;
public class boj15666 {
static int N,M,nums[];
static StringBuilder sb;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
sb = new StringBuilder();
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
nums = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
nums[i] = Integer.parseInt(st.nextToken());
}
nums = Arrays.stream(nums).distinct().sorted().toArray();
N = nums.length;
dfs(0,new int[M],0);
System.out.println(sb.toString());
}
public static void dfs(int idx,int[] sequence,int start){
if(idx==M){
Arrays.sort(sequence);
for (int i = 0; i < M; i++) {
sb.append(sequence[i]).append(" ");
}
sb.append("\\n");
return;
}
for (int i = start; i < N; i++) {
sequence[idx] = nums[i];
dfs(idx+1,sequence,i);
}
}
}
은영
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static int N,M;
static int[] arr,num;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()+" ");
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
arr = new int[N];
num = new int[M];
st = new StringTokenizer(br.readLine()+" ");
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
func(0,0);
}
private static void func(int start, int cnt) {
if(cnt==M) {
for (int i = 0; i < M; i++) {
System.out.print(num[i]+" ");
}System.out.println();
return;
}
int number = 0;
for (int i = start; i < N; i++) {
if(number==arr[i]) continue;
num[cnt] = arr[i];
func(i,cnt+1);
number = arr[i];
}
}
}
건
package day_0524;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.StringTokenizer;
public class BOJ15666 {
static int n, m;
static int[] arr;
static Set<Integer> sortedArr;
static int[] isSelected;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stk = new StringTokenizer(br.readLine());
n = Integer.parseInt(stk.nextToken());
m = Integer.parseInt(stk.nextToken());
stk = new StringTokenizer(br.readLine());
arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(stk.nextToken());
}
Arrays.sort(arr);
if (m == 1) {
Set<Integer> printSet = new HashSet<>();
for (int i = 0; i < n; i++) {
if (!printSet.contains(arr[i])) {
printSet.add(arr[i]);
System.out.println(arr[i]);
}
}
} else {
isSelected = new int[m];
permu(0);
}
}
static void permu(int cnt) {
if (cnt == m) {
if (calc()) {
for (int i = 0; i < m; i++) {
System.out.print(isSelected[i] + " ");
}
System.out.println();
}
return;
}
int prevNum = -1;
for (int i = 0; i < n; i++) {
if (prevNum != arr[i]) {
isSelected[cnt] = arr[i];
prevNum = arr[i];
permu(cnt + 1);
}
}
}
static boolean calc() {
for (int i = 0; i < m - 1; i++) {
if (isSelected[i] <= isSelected[i+1]) {
continue;
} else {
return false;
}
}
return true;
}
}
용문
class BJ15666 {
private var N: Int = 0
private var M: Int = 0
private var nums: [Int] = []
private var answerSet: Set<[Int]> = Set()
private var answers: [[Int]] = []
private var tempAnswer: [Int] = []
func solve() {
readComponents()
calc()
printAnswer()
}
private func readComponents() {
let temp = readLine()!.split(separator: " ").map { Int($0)! }
self.N = temp[0]
self.M = temp[1]
self.nums = readLine()!.split(separator: " ").map { Int($0)! }
self.tempAnswer = .init(repeating: 0, count: M)
}
private func calc() {
nums.sort()
makeArray(count: 0)
}
private func makeArray(count: Int) {
if count == M {
for index in 1..<M {
if tempAnswer[index - 1] > tempAnswer[index] {
return
}
}
if !answerSet.contains(tempAnswer) {
answerSet.insert(tempAnswer)
answers.append(tempAnswer)
}
return
}
for index in 0..<N {
tempAnswer[count] = nums[index]
if count > 0, tempAnswer[count] < tempAnswer[count - 1] {
continue
} else {
makeArray(count: count + 1)
}
}
}
private func printAnswer() {
for array in answers {
for value in array {
print(value, separator: "", terminator: " ")
}
print("")
}
}
}
BJ15666().solve()