• ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 9์ผ์ฐจ

    2021. 11. 9.

    by. JuneBee

    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
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€