๋ฌธ์ ์ถ์ฒ:
https://www.acmicpc.net/problem/15649
https://www.acmicpc.net/problem/15650
https://www.acmicpc.net/problem/15651
https://www.acmicpc.net/problem/15652
< N๊ณผ M(1) >
๋ฌธ์
์์ฐ์ N๊ณผ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
- 1๋ถํฐ N๊น์ง ์์ฐ์ ์ค์์ ์ค๋ณต ์์ด M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ฐ์ N๊ณผ M์ด ์ฃผ์ด์ง๋ค. (1 ≤ M ≤ N ≤ 8)
์ถ๋ ฅ
ํ ์ค์ ํ๋์ฉ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ด์ ์ถ๋ ฅํ๋ค. ์ค๋ณต๋๋ ์์ด์ ์ฌ๋ฌ ๋ฒ ์ถ๋ ฅํ๋ฉด ์ ๋๋ฉฐ,
๊ฐ ์์ด์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด์ ์ถ๋ ฅํด์ผ ํ๋ค.
์์ด์ ์ฌ์ ์์ผ๋ก ์ฆ๊ฐํ๋ ์์๋ก ์ถ๋ ฅํด์ผ ํ๋ค.
๋ฌธ์ ํ์ด
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int [] arr;
static int [] visited;
public static void search(int n, int m, int idx) {
if(idx==m) {
for(int i=0; i<m; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
return;
}
for(int i=0; i<n; i++) {
if(visited[i]==0) {
visited[i]=1;
arr[idx]=i+1;
search(n,m,idx+1);
visited[i]=0;
}
}
}
public static void main(String[] args) throws IOException {
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st=new StringTokenizer(bf.readLine());
int n=Integer.parseInt(st.nextToken());
int m=Integer.parseInt(st.nextToken());
arr=new int[m];
visited=new int[n];
search(n,m,0);
}
}
- main
: n, m ์ ๋ ฅ
: ํจ์ ํธ์ถ - search (์ด ๊ฐ์, ๊ตฌํ๋ ค๋ ๊ฐ์, ํ์ฌ ๊ตฌํ ๊ฐ์)
: ๊ตฌํ๋ ค๋ ๊ฐ์์ ํ์ฌ ๊ตฌํ ๊ฐ์๊ฐ ๊ฐ๋ค๋ฉด ์์ด ์ถ๋ ฅ
: ์ด๊ฐ์๋งํผ ๋ฐ๋ณตํ์ฌ ์์ง ์ฌ์ฉํ์ง ์์ ๊ฐ์ด๋ผ๋ฉด ๊ทธ ๊ฐ์ ์ฌ์ฉํด์ฃผ๊ณ search ํจ์๋ฅผ ํธ์ถํ์ฌ ๋ค์ ๊ฐ์ ๊ตฌํด์ค
-> ๊ฐ์ ๊ตฌํ๋ค๋ฉด ๋ค์ ์์ด์ ๊ตฌํ ๋ ๊ทธ ๊ฐ์ ์ฌ์ฉํ ์ ์๋๋ก visited๋ฅผ ์๋๋๋ก ๋๋ ค์ค
< N๊ณผ M(2) >
๋ฌธ์
์์ฐ์ N๊ณผ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
- 1๋ถํฐ N๊น์ง ์์ฐ์ ์ค์์ ์ค๋ณต ์์ด M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
- ๊ณ ๋ฅธ ์์ด์ ์ค๋ฆ์ฐจ์์ด์ด์ผ ํ๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ฐ์ N๊ณผ M์ด ์ฃผ์ด์ง๋ค. (1 ≤ M ≤ N ≤ 8)
์ถ๋ ฅ
ํ ์ค์ ํ๋์ฉ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ด์ ์ถ๋ ฅํ๋ค. ์ค๋ณต๋๋ ์์ด์ ์ฌ๋ฌ ๋ฒ ์ถ๋ ฅํ๋ฉด ์ ๋๋ฉฐ,
๊ฐ ์์ด์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด์ ์ถ๋ ฅํด์ผ ํ๋ค.
์์ด์ ์ฌ์ ์์ผ๋ก ์ฆ๊ฐํ๋ ์์๋ก ์ถ๋ ฅํด์ผ ํ๋ค.
๋ฌธ์ ํ์ด
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int[] arr;
public static void search(int n, int m, int idx, int start) {
if (idx == m) {
for (int i = 0; i < m; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
return;
}
for (int i = start; i < n; i++) {
arr[idx] = i + 1;
search(n, m, idx + 1, i + 1);
}
}
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bf.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
arr = new int[m];
int start = 0;
search(n, m, 0, start);
}
}
- '๊ณ ๋ฅธ ์์ด์ ์ค๋ฆ์ฐจ์'์ด์ด์ผ ํ๋ฏ๋ก 1 2์ 2 1์ ๊ฐ๋ค.
์ด ๋ถ๋ถ์ ๊ณ ๋ คํ๊ธฐ ์ํ์ฌ search ํจ์์์ searchํจ์๋ฅผ ํธ์ถํ ๋ ํธ์ถํ ์์น์ธ i๋ฅผ ๋๊น์ผ๋ก์จ ๊ทธ ์ ๊ฐ์ ๋ฝ์ง ๋ชปํ๊ฒ ํด ์ค๋ค.
< N๊ณผ M(3) >
๋ฌธ์
์์ฐ์ N๊ณผ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
- 1๋ถํฐ N๊น์ง ์์ฐ์ ์ค์์ M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
- ๊ฐ์ ์๋ฅผ ์ฌ๋ฌ ๋ฒ ๊ณจ๋ผ๋ ๋๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ฐ์ N๊ณผ M์ด ์ฃผ์ด์ง๋ค. (1 ≤ M ≤ N ≤ 7)
์ถ๋ ฅ
ํ ์ค์ ํ๋์ฉ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ด์ ์ถ๋ ฅํ๋ค. ์ค๋ณต๋๋ ์์ด์ ์ฌ๋ฌ ๋ฒ ์ถ๋ ฅํ๋ฉด ์ ๋๋ฉฐ,
๊ฐ ์์ด์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด์ ์ถ๋ ฅํด์ผ ํ๋ค.
์์ด์ ์ฌ์ ์์ผ๋ก ์ฆ๊ฐํ๋ ์์๋ก ์ถ๋ ฅํด์ผ ํ๋ค.
๋ฌธ์ ํ์ด
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
static int[] arr;
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// bufferedWriter ์ฌ์ฉํด์ ์๊ฐ์ด๊ณผ ํด๊ฒฐ
public static void search(int n, int m, int idx) throws IOException {
if (idx == m) {
for (int i = 0; i < m; i++) {
bw.write(arr[i] + " ");
}
bw.write("\n");
return;
}
for (int i = 0; i < n; i++) {
arr[idx] = i + 1;
search(n, m, idx + 1);
}
}
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bf.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
arr = new int[m];
search(n, m, 0);
bw.flush();
}
}
- ๊ฐ์ ์๋ฅผ ์ฌ๋ฌ ๋ฒ ๊ณ ๋ฅด๊ธฐ ์ํ์ฌ ์ฒซ ๋ฒ์งธ ๋ฌธ์ ์์ visited๋ฅผ ์์ด๋ค.
โ ์๊ฐ ์ด๊ณผ ๋ฐ์ ์ด์ ๋?
์ถ๋ ฅ๋ฌธ์ ์์ฑํ๋๋ฐ์ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ ๊ฒ์ด์๋ค. BufferedWriter๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ์๊ฐ ์ด๊ณผ๋ฅผ ํด๊ฒฐํ ์ ์์๋ค.
< N๊ณผ M(4) >
๋ฌธ์
์์ฐ์ N๊ณผ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
- 1๋ถํฐ N๊น์ง ์์ฐ์ ์ค์์ M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
- ๊ฐ์ ์๋ฅผ ์ฌ๋ฌ ๋ฒ ๊ณจ๋ผ๋ ๋๋ค.
- ๊ณ ๋ฅธ ์์ด์ ๋น ๋ด๋ฆผ์ฐจ์์ด์ด์ผ ํ๋ค.
- ๊ธธ์ด๊ฐ K์ธ ์์ด A๊ฐ A1 ≤ A2 ≤... ≤ AK-1 ≤ AK๋ฅผ ๋ง์กฑํ๋ฉด, ๋น ๋ด๋ฆผ์ฐจ์์ด๋ผ๊ณ ํ๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ฐ์ N๊ณผ M์ด ์ฃผ์ด์ง๋ค. (1 ≤ M ≤ N ≤ 8)
์ถ๋ ฅ
ํ ์ค์ ํ๋์ฉ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ด์ ์ถ๋ ฅํ๋ค. ์ค๋ณต๋๋ ์์ด์ ์ฌ๋ฌ ๋ฒ ์ถ๋ ฅํ๋ฉด ์ ๋๋ฉฐ,
๊ฐ ์์ด์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด์ ์ถ๋ ฅํด์ผ ํ๋ค.
์์ด์ ์ฌ์ ์์ผ๋ก ์ฆ๊ฐํ๋ ์์๋ก ์ถ๋ ฅํด์ผ ํ๋ค.
๋ฌธ์ ํ์ด
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
static int[] arr;
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void search(int n, int m, int idx, int start) throws IOException {
if (idx == m) {
for (int i = 0; i < m; i++) {
bw.write(arr[i] + " ");
}
bw.write("\n");
return;
}
for (int i = start; i < n; i++) {
arr[idx] = i + 1;
search(n, m, idx + 1, i);
}
}
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bf.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
arr = new int[m];
int start=0;
search(n, m, 0, start);
bw.flush();
}
}
- ๋ฐ๋ก ์ ๋ฌธ์ ์์ ๋น ๋ด๋ฆผ์ฐจ์ ์กฐ๊ฑด์ ์ถ๊ฐํ์๋ค. search ํจ์์์ ์์ํ๋ ์์น๋ฅผ ์ถ๊ฐํจ์ผ๋ก์จ ํด๊ฒฐํ ์ ์์๋ค.
์๊ฐ๐ค
N๊ณผ M ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฉฐ ๋ฐฑํธ๋ํน์ ๋ํ์ฌ ์กฐ๊ธ ์๊ฒ ๋ ๊ฒ ๊ฐ๋ค.
๊ทธ๋๋ ์ด๋ ต๋ค!
- N๊ณผ M(1)
- N๊ณผ M(2)
- N๊ณผ M(3)
-N๊ณผ M(4)
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 1759_์ํธ ๋ง๋ค๊ธฐ (0) | 2022.08.15 |
---|---|
[Baekjoon] 1715_์นด๋ ์ ๋ ฌํ๊ธฐ (0) | 2022.08.06 |
[Baekjoon] 2564_๊ฒฝ๋น์ (0) | 2022.06.10 |
[Baekjoon] 3184_์ (0) | 2022.06.02 |
[Baekjoon] 14500_ํ ํธ๋ก๋ฏธ๋ ธ (0) | 2022.05.31 |