BOJ_S2_15663
๐ [S2_15663] N๊ณผ M (9)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.StringTokenizer;
public class BOJ_S2_15663 {
static int N, M;
static int[] arr;
static int[] ans;
static boolean[] check;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
// **** input start ****
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
arr = new int[N];
ans = new int[M];
check = new boolean[N];
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
// **** input end ****
// ์ ๋ ฌ
Arrays.sort(arr);
comb(0);
System.out.println(sb);
} // main end
static void comb(int cnt) {
// ๊ธฐ์ ์กฐ๊ฑด
if (cnt == M) {
for (int i = 0; i < ans.length; i++) {
sb.append(ans[i]).append(" ");
}
sb.append("\n");
return;
} else {
// ์ด์ ๊ฐ ์ ์ฅ
int before = 0;
for (int i = 0; i < N; i++) {
// ์ด๋ฏธ ๋ฝ์ ๊ฒ์ด๋ฉด
if (check[i])
continue;
// ์ด์ ๊ฐ๊ณผ ๋ค๋ฅด๋ค๋ฉด
else if (before != arr[i]) {
// ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
check[i] = true;
// ์ ๋ต ๋ฐฐ์ด์ ๊ฐ ๋ฃ์ด์ฃผ๊ธฐ
ans[cnt] = arr[i];
// ์ ์ ๊ฐ ๊ฐฑ์ -> ๋ค์ด์๋ ๊ฐ์ด ์ ์ ๊ฐ์ผ๋ก ๋๋ค
before = arr[i];
comb(cnt + 1);
// ๋ฐฑํธ๋ํน
check[i] = false;
}
}
}
}
} // class end
๐ค ๋์ ์๊ฐ
์ด ๋ฌธ์ ๋ combination์ ์ฐ์ ๋ฌธ์ ๋ค ์ค ํ๋์ด๋ค.
์ด ๋ฌธ์ ์์์ ์กฐ๊ฑด์ ์กฐํฉ์์ ์ ์ ๊ฐ์ด ๋์จ๋ค๋ฉด ์ถ๋ ฅํ์ง ์๋ ๊ฒ์ด๋ค.
๊ทธ๋์ comb ๋ฉ์๋์์ ์ด์ ๊ฐ์ ์ ์ฅํด์ ๋ง์ฝ ์ด๋ฏธ ๋ฝ์ ๊ฒ์ด๋ฉด ํต๊ณผํ๊ณ ์ด์ ๊ฐ๊ณผ ๋ค๋ฅด๋ค๋ฉด ์ ๋ต ๋ฐฐ์ด์ ๊ฐ์ ๋ฃ์ด์ฃผ๊ณ ๊ฐ์ด M ๋งํผ ๋ค ๋์์ผ๋ฉด ์ ๋ต ๋ฐฐ์ด ๊ฐ์ ์ถ๋ ฅํ๋ค.
์ ๋ต ๋ฐฐ์ด์ ์ด๊ธฐํ ์์ผ์ค ํ์๋ ์๋๊ฒ ๊ณ์ ๊ฐ์ ๋ฎ์ด์ฐ๊ธฐ ๋๋ฌธ์ด๋ค.