BOJ_S2_15666
๐ [S2_15666] N๊ณผ M (12)
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;
static int[] res;
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];
res = new int[M];
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
// **** input end ****
// ์ ๋ ฌ
Arrays.sort(arr);
dfs(0, 0);
// ์ถ๋ ฅ
System.out.println(sb);
}
// comb
static void dfs(int start, int idx) {
// ๊ธฐ์ ์กฐ๊ฑด
if (idx == M) {
// ๊ฒฐ๊ณผ๊ฐ๋ค ์ถ๋ ฅ
for (int i = 0; i < M; i++) {
sb.append(res[i]).append(" ");
}
sb.append("\n");
return;
}
// ์ด์ ๊ฐ ํ์ธ ์ฉ๋
int num = 0;
for (int i = start; i < N; i++) {
// ๊ทธ์ ๊ฐ์ด๋ ๊ฐ๋ค๋ฉด
if (arr[i] == num)
continue;
// ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ๋ฃ๊ธฐ
res[idx] = arr[i];
dfs(i, idx + 1);
num = arr[i];
}
}
}
๐ค ๋์ ์๊ฐ
์ด ๋ฌธ์ ๋ N๊ณผ M ์๋ฆฌ์ฆ ์ค ํ๊ฐ ..
dfs๋ก ํ์ด์ฃผ์๋ค. ๋ฐฉ๋ฌธ์ฒดํฌ๋ฅผ ํ๊ธฐ ๋ณด๋จ ์ด๋ฏธ ์ฌ์ฉํ๋ ๊ฒ๋ ์ฌ์ฉํ ์ ์์ด์ ๊ทธ์ ๊ฐ๊ณผ ๊ฐ์์ง๋ง ํ๋จํด์ ๊ฐ์ผ๋ฉด ํต๊ณผํ๊ณ ๊ฐ์ง ์๋ค๋ฉด ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ๋ฃ์ด ์ถ๋ ฅํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ์๋ค.
ํ์ด ๊ณผ์ ์ด๋ค.
- N๊ณผ M ์ ๋ ฅ ๋ฐ๊ธฐ, ๋ฐฐ์ด์ ๊ฐ๋ค ์ ๋ ฅ
- dfs ๋ฉ์๋๋ฅผ ์คํํ๋ค.
- ๋งค๊ฐ๋ณ์ start๋ ๊ฐ์ด ์ ์ฒด ๊ฐ๋ค์ ๋๊ธฐ ์์ํ๋ ์์๊ฐ์ ์๋ฏธ
- ๋งค๊ฐ๋ณ์ idx๋ ๋ช ๊ฐ์ ๊ฐ์ ์ถ์ถํ๋์ง ํ์ธ
- num์ด๋ผ๋ ๋ณ์๋ก ์ด์ ๊ฐ์ด ์ด๋ค ๊ฐ์ธ์ง ํ์ธํด ์ค๋ค.
- ๋ง์ฝ ์ด์ ๊ฐ์ด๋ ํ์ฌ ๊ฐ์ด๋ ๊ฐ๋ค๋ฉด ํต๊ณผ
- ๋ค๋ฅด๋ค๋ฉด ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ๊ฐ์ ๋ฃ์ด์ค๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ dfs ๋ฉ์๋๋ฅผ idx๋ฅผ ํ๋ ์ฆ๊ฐ์ํจ ์ํ๋ก ์คํํ๋ค.
- ๋ง์ฝ idx ๊ฐ M์ด ๋๋ค๋ฉด ( ๊ณผ์ ์ด ๋๋๋ค๋ฉด ) ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ์ถ๋ ฅํด์ค๋ค.
- ๋ฐฑํธ๋ํน์ ํตํด num์ ๊ฐ์ ์ด์ ๊ฐ์ผ๋ก ๊ฐฑ์ ์์ผ์ค๋ค.