
๋ ์ง : 2021 ๋ 11 ์ 9 ์ผ
์์ฒญ ๊ฐ์ : 01. ์ด๋ป๊ฒ๋ ํผ๋ค. ์์ ํ์ (Brute Force)
์์ ํ์
๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ์ ๋ถ ํ์
4๊ฐ์ง ๋ฌธ์ ์ ํ์ผ๋ก ๋๋์ด ๋ณผ ์ ์์.
[๋ฌธ์ ์ ํ]
1. N๊ฐ์ ์์ ์ค ์ค๋ณต ์์ด M ๊ฐ๋ฅผ ์์์๊ฒ ๋์ด
2. N๊ฐ์ ์์ ์ค ์ค๋ณต ์์ด M ๊ฐ๋ฅผ ๊ณ ๋ฅด๊ธฐ
3. N๊ฐ์ ์์ ์ค ์ค๋ณต ํ์ฉํ์ฌ M ๊ฐ๋ฅผ ์์์๊ฒ ๋์ด
4. N๊ฐ์ ์์ ์ค ์ค๋ณต ํ์ฉํ์ฌ M ๊ฐ๋ฅผ ๊ณ ๋ฅด๊ธฐ
์์ ํ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํ ๋, ๋ฐฑํธ๋ํน์ด ์์ฃผ ์ฌ์ฉ๋๋๋ฐ dfs๋ ๋ฐฑํธ๋ํน ๋ฌธ์ ๋ฐฉ๋ฒ ์ค ํ๋์
๋ฐ๋ผ์, ์์ ํ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํ์ดํ๋ ๊ฒฝ์ฐ์,
public static void recurrsive(int depth){
//์ฌ๊ท
}
public static void main(String[] args){
recurrsive(0);
}
์์ ํํ๊ฐ ์์ฃผ ์ฐ์ธ๋ค.
๋๋ ์ํ์ ๋ณดํต ์์ด, ์กฐํฉ, ๋ถ๋ถ์งํฉ์ ๋ง์ด ์ฌ์ฉํ๋๋ฐ dfs๋ฅผ ํ์ฉํ๋ฉด ๋ฐํ์ ์๋ฌ๊ฐ ์ข ๋ ๋ ๊ฒ๊ฐ์์ ์์ผ๋ก ๋๋๋ก dfs๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ค.
์์ ์ ์ํ 4๊ฐ์ง ๋ฌธ์ ์ ํ์ ์๋ ๋ฌธ์ ๋ค๋ก ์ฐ์ตํด ๋ณผ ์ ์๋ค.
| N๊ณผ M (3) | https://www.acmicpc.net/problem/15651 |
| N๊ณผ M (1) | https://www.acmicpc.net/problem/15649 |
| N๊ณผ M (4) | https://www.acmicpc.net/problem/15652 |
| N๊ณผ M (2) | https://www.acmicpc.net/problem/15650 |
N ๊ณผ M (1)
์ค๋ณต ์์ด M ๊ฐ๋ฅผ ๊ณ ๋ฅด๋ ์์ด: ์ด๋ฏธ ๊ณ ๋ฅธ ์์๋ ๊ณ ๋ฅผ ์ ์์
์์ด์ ์ฌ์ ์์ผ๋ก ์ถ๋ ฅํจ
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
/**
* @author June Park
* @date 11/09/2021
* N๊ณผ M (1) ๋ฌธ์ : N ๊ฐ ์ค M ๊ฐ๋ฅผ ์ค๋ณต ์์ด ๋ฝ์
* */
public class BOJ_15649_N๊ณผM1 {
static int N,M ,num[];
static boolean visited[];
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken()); //N๊ฐ ์ค
M = Integer.parseInt(st.nextToken()); //M๊ฐ๋ฅผ ๋ฝ๋๋ค
num = new int [M]; //๋ฐฉ๋ฌธํ ๋ฒํธ๋ฅผ ๋ฃ์ ๋ฐฐ์ด
visited = new boolean[N+1]; //๋ฐฉ๋ฌธ์ฒ๋ฆฌ
dfs(0);
}
private static void dfs(int depth) {
if(depth == M) { //M๊ฐ๋ฅผ ๋ฝ์
for(int i =0 ; i < M ; i++) {
System.out.print(num[i]+" ");
}
System.out.println();
return;
}
for(int i = 1 ; i <= N ;i ++) {
//์กฐ๊ฑด
if(visited[i]) continue;
visited[i] = true; //๋ฐฉ๋ฌธ์ฒ๋ฆฌ
num[depth] = i;//ํ์ฌ
dfs(depth+1);//์ฌ๊ท
visited[i] = false;//release
}
}
}
N๊ณผ M(2)
package com.fastcamp.backtracking;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
/**
* @author June Park
* @date 11/09/2021
* ์ค๋ณต ์์ด M ๊ฐ๋ฅผ ๊ณ ๋ฆ
* ์ค๋ฆ์ฐจ์
* */
public class BOJ_15650_N๊ณผM2 {
static int N,M ,num[];
static boolean visited[];
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken()); //N๊ฐ ์ค
M = Integer.parseInt(st.nextToken()); //M๊ฐ๋ฅผ ๋ฝ๋๋ค
num = new int [M]; //๋ฐฉ๋ฌธํ ๋ฒํธ๋ฅผ ๋ฃ์ ๋ฐฐ์ด
visited = new boolean[N+1]; //๋ฐฉ๋ฌธ์ฒ๋ฆฌ
dfs(0);
}
private static void dfs(int depth) {
if(depth == M) {
for(int i:num)System.out.print(i+" ");
System.out.println();
return;
}
for(int i = 1; i<= N ;i ++) {
if(visited[i]) continue;
if(depth>0 && num[depth-1]>i)continue;
//Else:
visited[i] = true;
num[depth] = i;
dfs(depth+1);
visited[i] = false;
}
}
}
N๊ณผ M(3)
package com.fastcamp.backtracking;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
/**
* @author June Park
* @date 11/09/2021
* N๊ณผ M (3) : ์ค๋ณต ํ์ฉ
* */
public class BOJ_15651_N๊ณผM3 {
static int N,M ,num[];
static BufferedWriter bw;
//static boolean visited[];
public static void main(String[] args) throws Exception {
bw = new BufferedWriter(new OutputStreamWriter(System.out));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken()); //N๊ฐ ์ค
M = Integer.parseInt(st.nextToken()); //M๊ฐ๋ฅผ ๋ฝ๋๋ค
num = new int [M]; //๋ฐฉ๋ฌธํ ๋ฒํธ๋ฅผ ๋ฃ์ ๋ฐฐ์ด
//visited = new boolean[N+1]; //๋ฐฉ๋ฌธ์ฒ๋ฆฌ
br.close();
dfs(0);
bw.flush();
bw.close();
}
private static void dfs(int depth) throws IOException {
if(depth == M ) {
for(int i : num)bw.write(i+" ");// System.out.print(i+" ");
bw.write("\n");
return;
}
for(int i = 1 ;i <=N ;i ++) {
//visited ํ์ ์์
num[depth] = i;
dfs(depth+1);
}
}
}
์ 3๋ฒ ๋ฌธ์ ๋ bufferedWriter๋ฅผ ์ฐ์ง ์์ผ๋ฉด ์๊ฐ ์ด๊ณผ ์๋ฌ๊ฐ ๋๋ค.
๋ฐ๋ผ์, bw์ write ํ ํ์ main์์ ํ๋ฒ์ flushํ๊ณ ๋ซ์์ฃผ๋ฉด ์๊ฐ์ด๊ณผ ์๋ฌ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
N๊ณผ M(4)
package com.fastcamp.backtracking;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
/**
* @author June Park
* @date 11/09/2021
* N๊ณผ M (4) : ์ค๋ณต ํ์ฉ
* ๋น๋ด๋ฆผ์ฐจ์ : ์ค๋ณต์ ํ์ฉ(2 2 ๊ฐ๋ฅ)๋๋ 2 1 ์ ๋ถ๊ฐ
* */
public class BOJ_15652_N๊ณผM4 {
static int N,M ,num[];
static BufferedWriter bw;
//static boolean visited[];
public static void main(String[] args) throws Exception {
bw = new BufferedWriter(new OutputStreamWriter(System.out));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken()); //N๊ฐ ์ค
M = Integer.parseInt(st.nextToken()); //M๊ฐ๋ฅผ ๋ฝ๋๋ค
num = new int [M]; //๋ฐฉ๋ฌธํ ๋ฒํธ๋ฅผ ๋ฃ์ ๋ฐฐ์ด
//visited = new boolean[N+1]; //๋ฐฉ๋ฌธ์ฒ๋ฆฌ
br.close();
dfs(0);
bw.flush();
bw.close();
}
private static void dfs(int depth) throws IOException {
if(depth == M) {
for(int i : num)bw.write(i+" ");
bw.write("\n");
return;
}
for(int i = 1 ; i<= N ;i ++) {
//๋ฐฉ๋ฌธ์กฐ๊ฑด ํ์์์
if(depth!=0 && num[depth-1]>i)continue; //์ด์ ์์๊ฐ ์ง๊ธ๋ณด๋คํฌ๋ฉด skip
num[depth]= i;
dfs(depth+1);
}
}
}
์ด๋ฒ ๋ฌธ์ ๋ค์ ํ๋ฉด์ dfs ๋ฅผ ์ข ๋ ์ ์ดํดํ๊ฒ ๋ ๊ฒ ๊ฐ๋ค.
ํจ์คํธ์บ ํผ์ค ํ๊ธ ์ฑ๋ฆฐ์ง ๋ฐ๋ก๊ฐ๊ธฐ๐ https://bit.ly/3FVdhDa
์๊ฐ๋ฃ 100% ํ๊ธ ์ฑ๋ฆฐ์ง | ํจ์คํธ์บ ํผ์ค
๋ฑ 5์ผ๊ฐ ์งํ๋๋ ํ๊ธ์ฑ๋ฆฐ์ง๋ก ์๊ฐ๋ฃ 100% ํ๊ธ๋ฐ์ผ์ธ์! ๋ ๋ฆ๊ธฐ์ ์ ์๊ธฐ๊ณ๋ฐ ๋ง์ฐจ ํ์น!
fastcampus.co.kr
๋ณธ ํฌ์คํ ์ ํจ์คํธ์บ ํผ์ค ํ๊ธ ์ฑ๋ฆฐ์ง ์ฐธ์ฌ๋ฅผ ์ํด ์์ฑ๋์์ต๋๋ค.
'๐ STUDY > FASTCAMPUS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 11์ผ์ฐจ (0) | 2021.11.11 |
|---|---|
| ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 10์ผ์ฐจ (0) | 2021.11.10 |
| ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 8์ผ์ฐจ (0) | 2021.11.08 |
| ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 7์ผ์ฐจ (0) | 2021.11.07 |
| ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 6์ผ์ฐจ (0) | 2021.11.06 |