๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm/Baekjoon

๋ฐฑ์ค€ 15650 N๊ณผ M(2)

๐Ÿ’ปQ

 

15650๋ฒˆ: N๊ณผ M (2)

ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ๋ฌธ์ œ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ˆ˜์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค. ์ค‘๋ณต๋˜๋Š” ์ˆ˜์—ด์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ถœ๋ ฅํ•˜๋ฉด ์•ˆ๋˜๋ฉฐ, ๊ฐ ์ˆ˜์—ด์€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ์ˆ˜์—ด์€ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋กœ ์ถœ๋ ฅํ•ด

www.acmicpc.net

 

๐Ÿ’กA

dfs ํ’€์ด ๋ฐฉ์‹์œผ๋กœ ํ’€์—ˆ๋‹ค. 
1๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ์ˆ˜ ์ค‘ ์˜ค๋ฆ„์ฐจ์ˆœ์ด๋ฉด์„œ M์˜ ๊ธธ์ด๊นŒ์ง€ ๋‚˜์—ด ๊ฐ€๋Šฅํ•œ ์ˆ˜์—ด์„ ์ฐพ๋Š” ๋ฌธ์ œ.
start๋กœ ์ดˆ๊ธฐํ™”ํ•œ i๋ฅผ arr ๋ฐฐ์—ด์— ๋„ฃ๊ณ  ์žฌ๊ท€ ํ˜ธ์ถœํ•˜๋ฉด์„œ i๋ฅผ +1 ํ•˜๋ฉฐ ํƒ์ƒ‰ํ•œ๋‹ค.
depth๋„ +1๋ฅผ ํ•˜๋ฉฐ ์žฌ๊ท€ ํ˜ธ์ถœ์„ ํ•˜๋ฉด ๋‹ค์Œ ์žฌ๊ท€์—์„œ๋Š” ๋ฐ˜๋ณต๋ฌธ์—์„œ +1ํ•œ ๊ฐ’๋ถ€ํ„ฐ ํƒ์ƒ‰ ํ•˜๊ฒŒ ๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
depth๊ฐ€ m๊ณผ ๊ฐ™์•„์งˆ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๊ฒŒ ๋œ๋‹ค. 
import java.util.Scanner;

public class Main {
    static Scanner sc = new Scanner(System.in);
    static int n = sc.nextInt();
    static int m = sc.nextInt();
    static int[] arr = new int[m];
    static StringBuilder sb = new StringBuilder();
    
    public static void dfs(int start, int depth) {
        if(depth == m) {
            for(int i : arr) {
                sb.append(i).append(' ');
            }
            sb.append('\n');
            return;
        }
        
        for(int i=start; i<=n; i++) {
            arr[depth] = i;
            dfs(i+1, depth+1);
        }
    }
    
    public static void main(String[] args) {
        dfs(1,0);
        System.out.println(sb);
    }
}โ€‹