๋ฐฑ์ค 15650๋ฒ, N๊ณผ M (2) (with.Java)
๋ฐฑ์ค 15650๋ฒ, N๊ณผ M (2) (with.Java)์ ๋ํ์ฌ ์์๋ณธ ๊ธ์ ๋๋ค.
์ฝ๋ฉ ํ ์คํธ ๋ฌธ์ ๋ฅผ ํ๋ฉฐ, ํ์๋ ๋ฌธ์ ์ ๋ํ ํ๊ณ ์ ๋ค๋ฅธ ํ์ด ๋ฐฉ๋ฒ์ ์์๋ณด๋ฉฐ, ์์๊ฐ๊ณ ์ ํฉ๋๋ค.
๋ฌธ์ ์ ๋ํด ๋จผ์ ์์๋ณด๊ฒ ์ต๋๋ค.
๋ฌธ์
์์ฐ์ N๊ณผ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
1๋ถํฐ N๊น์ง ์์ฐ์ ์ค์์ ์ค๋ณต ์์ด M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด ๊ณ ๋ฅธ ์์ด์ ์ค๋ฆ์ฐจ์์ด์ด์ผ ํ๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ฐ์ N๊ณผ M์ด ์ฃผ์ด์ง๋ค. (1 โค M โค N โค 8)
์ถ๋ ฅ
ํ ์ค์ ํ๋์ฉ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ด์ ์ถ๋ ฅํ๋ค.
์ค๋ณต๋๋ ์์ด์ ์ฌ๋ฌ ๋ฒ ์ถ๋ ฅํ๋ฉด ์๋๋ฉฐ, ๊ฐ ์์ด์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด์ ์ถ๋ ฅํด์ผ ํ๋ค.
์์ด์ ์ฌ์ ์์ผ๋ก ์ฆ๊ฐํ๋ ์์๋ก ์ถ๋ ฅํด์ผ ํ๋ค.
๋ฌธ์ ํ์ด
import java.util.*;
import java.io.*;
class Main {
public static int[] arr;
public static int N, M;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.valueOf(st.nextToken());
M = Integer.valueOf(st.nextToken());
arr = new int[M];
dfs(1, 0);
}
public static void dfs(int el, int depth){
if(depth == M){
for(int i : arr){
System.out.print(i + " ");
}
System.out.println();
return;
}
for(int i = el; i <= N; i++){
arr[depth] = i;
dfs(i + 1, depth + 1);
}
}
}
ํ์ด ์ค๋ช
์ด ์ฝ๋๋ ์กฐํฉ(combination)์ ๊ตฌํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ํ๋ก๊ทธ๋จ์ ๋๋ค.
์ฃผ์ด์ง N๊ฐ์ ์ซ์ ์ค์์ M๊ฐ์ ์ซ์๋ฅผ ์ ํํ์ฌ ๊ฐ๋ฅํ ๋ชจ๋ ์กฐํฉ์ ์ถ๋ ฅํฉ๋๋ค.
์ด๋ฅผ ์ฌ๊ท์ ์ธ ๊น์ด ์ฐ์ ํ์(DFS, Depth-First Search) ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ๊ตฌํํฉ๋๋ค.
์ ๋ ฅ ์ฒ๋ฆฌ: ํ๋ก๊ทธ๋จ์ BufferedReader๋ฅผ ํตํด N๊ณผ M ๊ฐ์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
N์ ์ฌ์ฉํ ์ซ์์ ๋ฒ์๋ฅผ, M์ ์ ํํ ์ซ์์ ๊ฐ์๋ฅผ ๋ํ๋ ๋๋ค.
์ด๋, M ํฌ๊ธฐ์ ๋ฐฐ์ด arr์ ์์ฑํ์ฌ ์ ํ๋ ์ซ์๋ค์ ์ ์ฅํฉ๋๋ค.
์ฌ๊ท ํธ์ถ์ ํตํ ์กฐํฉ ์์ฑ: ํ๋ก๊ทธ๋จ์ dfs๋ผ๋ ์ฌ๊ท ํจ์๋ฅผ ํธ์ถํ์ฌ ์กฐํฉ์ ์์ฑํฉ๋๋ค.
dfs ํจ์๋ ํ์ฌ์ ์ซ์(el)์ ๊น์ด(depth)๋ฅผ ์ธ์๋ก ๋ฐ์ต๋๋ค.
๊ธฐ์ ์กฐ๊ฑด: depth๊ฐ M์ ๋๋ฌํ๋ฉด, arr ๋ฐฐ์ด์ ์ ์ฅ๋ M๊ฐ์ ์ซ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
์ฌ๊ท ํธ์ถ: for๋ฌธ์ ํตํด ํ์ฌ ์ซ์ i๋ถํฐ N๊น์ง ๋ฐ๋ณตํ๋ฉฐ, arr[depth]์ ํ์ฌ ์ซ์๋ฅผ ์ ์ฅํ๊ณ , ๋ค์ ๊น์ด์์ dfs๋ฅผ ํธ์ถํฉ๋๋ค.
์ด๋, ๋ค์ ์ซ์๋ก i + 1์ ๋๊ฒจ์ค์ผ๋ก์จ ์ซ์๊ฐ ์ค๋ณต๋์ง ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
์ถ๋ ฅ: ์กฐํฉ์ด ์์ฑ๋๋ฉด, arr ๋ฐฐ์ด์ ์ ์ฅ๋ ๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
์ด์ , dfs(i + 1, depth + 1) ๋์ dfs(el + 1, depth + 1)์ ์ฌ์ฉํ์ ๊ฒฝ์ฐ์ ๊ฒฐ๊ณผ์ ๊ทธ ์ด์ ๋ฅผ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
ํ์ฌ ์ฝ๋(dfs(i + 1, depth + 1)): ์ด ์ฝ๋๋ ํ์ฌ ์ซ์ i๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ค์ ์ซ์๋ฅผ ํ์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, i๊ฐ 1์ผ ๋ ๋ค์ ์ฌ๊ท ํธ์ถ์์๋ i + 1, ์ฆ 2๋ถํฐ ํ์์ ์์ํ๊ฒ ๋ฉ๋๋ค.
์ด ๋ฐฉ์์ ์ค๋ณต ์์ด ์ฌ๋ฐ๋ฅธ ์กฐํฉ์ ๋ง๋ค์ด๋ ๋๋ค.
์๋ชป๋ ์ฝ๋(dfs(el + 1, depth + 1)): ๋ง์ฝ i + 1 ๋์ el + 1์ ์ฌ์ฉํ๊ฒ ๋๋ฉด, ์ฌ๊ท ํธ์ถ ์๋ง๋ค ์ด๊ธฐ ์ซ์์ธ el์ ๋ค์ ์ซ์๋ฅผ ํ์ํ๊ฒ ๋ฉ๋๋ค.
์ด๋ก ์ธํด, ๋ชจ๋ ์ฌ๊ท ํธ์ถ์ด ๋์ผํ el์ ๊ธฐ์ค์ผ๋ก ์งํ๋์ด ์ค๋ณต๋ ์ซ์๊ฐ ์ ํ๋๊ฑฐ๋, ์ฌ๋ฐ๋ฅธ ์กฐํฉ์ ์์ฑํ์ง ๋ชปํ๊ฒ ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์ฒ์ el์ด 1์ด๋ผ๋ฉด ๋ชจ๋ ์ฌ๊ท ํธ์ถ์์ el์ด 1์ ๊ณ ์ ๋์ด ์๋ชป๋ ์กฐํฉ์ ์์ฑํ๊ฒ ๋ฉ๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, ์กฐํฉ์ ๊ตฌํ๊ธฐ ์ํด์๋ ํ์ฌ์ ์ซ์ i๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ค์ ์ซ์ i + 1๋ถํฐ ํ์ํด์ผ ํ๋ฉฐ, el + 1์ ์ฌ์ฉํ๋ฉด ์ฌ๊ท ํธ์ถ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์งํ๋์ง ์์ต๋๋ค.