-
728x90๋ฐ์ํ
๋ ์ง : 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
๋ณธ ํฌ์คํ ์ ํจ์คํธ์บ ํผ์ค ํ๊ธ ์ฑ๋ฆฐ์ง ์ฐธ์ฌ๋ฅผ ์ํด ์์ฑ๋์์ต๋๋ค.
728x90๋ฐ์ํ'๐ 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 ๋๊ธ