Contents

๋ฐฑ์ค€ 15650๋ฒˆ, N๊ณผ M (2) (with.Java)

   Aug 13, 2025     3 min read

๋ฐฑ์ค€ 15650๋ฒˆ, N๊ณผ M (2) (with.Java)์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„๋ณธ ๊ธ€์ž…๋‹ˆ๋‹ค.

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉฐ, ํ’€์—ˆ๋˜ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํšŒ๊ณ ์™€ ๋‹ค๋ฅธ ํ’€์ด ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๋ฉฐ, ์•Œ์•„๊ฐ€๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ์— ๋Œ€ํ•ด ๋จผ์ € ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ

์ž์—ฐ์ˆ˜ N๊ณผ M์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์•„๋ž˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ธธ์ด๊ฐ€ M์ธ ์ˆ˜์—ด์„ ๋ชจ๋‘ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

1๋ถ€ํ„ฐ N๊นŒ์ง€ ์ž์—ฐ์ˆ˜ ์ค‘์—์„œ ์ค‘๋ณต ์—†์ด M๊ฐœ๋ฅผ ๊ณ ๋ฅธ ์ˆ˜์—ด ๊ณ ๋ฅธ ์ˆ˜์—ด์€ ์˜ค๋ฆ„์ฐจ์ˆœ์ด์–ด์•ผ ํ•œ๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ž์—ฐ์ˆ˜ N๊ณผ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 โ‰ค M โ‰ค N โ‰ค 8)

์ถœ๋ ฅ

ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ๋ฌธ์ œ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ˆ˜์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค.

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

์ˆ˜์—ด์€ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋กœ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

๋ฌธ์ œ ํ’€์ด

import java.util.*;
import java.io.*;

class Main {
    public static int[] arr;
    public static int N, M;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        N = Integer.valueOf(st.nextToken());
        M = Integer.valueOf(st.nextToken());
        arr = new int[M];

        dfs(1, 0);
    }

    public static void dfs(int el, int depth){
        if(depth == M){
            for(int i : arr){
                System.out.print(i + " ");
            }
            System.out.println();
            return;
        }

        for(int i = el; i <= N; i++){
            arr[depth] = i;
            dfs(i + 1, depth + 1);
        }
    }
}

ํ’€์ด ์„ค๋ช…

์ด ์ฝ”๋“œ๋Š” ์กฐํ•ฉ(combination)์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.

์ฃผ์–ด์ง„ N๊ฐœ์˜ ์ˆซ์ž ์ค‘์—์„œ M๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์„ ํƒํ•˜์—ฌ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์กฐํ•ฉ์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์žฌ๊ท€์ ์ธ ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS, Depth-First Search) ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

์ž…๋ ฅ ์ฒ˜๋ฆฌ: ํ”„๋กœ๊ทธ๋žจ์€ BufferedReader๋ฅผ ํ†ตํ•ด N๊ณผ M ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›์Šต๋‹ˆ๋‹ค.

N์€ ์‚ฌ์šฉํ•  ์ˆซ์ž์˜ ๋ฒ”์œ„๋ฅผ, M์€ ์„ ํƒํ•  ์ˆซ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์ด๋•Œ, M ํฌ๊ธฐ์˜ ๋ฐฐ์—ด arr์„ ์ƒ์„ฑํ•˜์—ฌ ์„ ํƒ๋œ ์ˆซ์ž๋“ค์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์žฌ๊ท€ ํ˜ธ์ถœ์„ ํ†ตํ•œ ์กฐํ•ฉ ์ƒ์„ฑ: ํ”„๋กœ๊ทธ๋žจ์€ dfs๋ผ๋Š” ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์กฐํ•ฉ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

dfs ํ•จ์ˆ˜๋Š” ํ˜„์žฌ์˜ ์ˆซ์ž(el)์™€ ๊นŠ์ด(depth)๋ฅผ ์ธ์ž๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค.

๊ธฐ์ € ์กฐ๊ฑด: depth๊ฐ€ M์— ๋„๋‹ฌํ•˜๋ฉด, arr ๋ฐฐ์—ด์— ์ €์žฅ๋œ M๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์žฌ๊ท€ ํ˜ธ์ถœ: for๋ฌธ์„ ํ†ตํ•ด ํ˜„์žฌ ์ˆซ์ž i๋ถ€ํ„ฐ N๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋ฉฐ, arr[depth]์— ํ˜„์žฌ ์ˆซ์ž๋ฅผ ์ €์žฅํ•˜๊ณ , ๋‹ค์Œ ๊นŠ์ด์—์„œ dfs๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

์ด๋•Œ, ๋‹ค์Œ ์ˆซ์ž๋กœ i + 1์„ ๋„˜๊ฒจ์คŒ์œผ๋กœ์จ ์ˆซ์ž๊ฐ€ ์ค‘๋ณต๋˜์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

์ถœ๋ ฅ: ์กฐํ•ฉ์ด ์™„์„ฑ๋˜๋ฉด, arr ๋ฐฐ์—ด์— ์ €์žฅ๋œ ๊ฐ’์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ, dfs(i + 1, depth + 1) ๋Œ€์‹  dfs(el + 1, depth + 1)์„ ์‚ฌ์šฉํ–ˆ์„ ๊ฒฝ์šฐ์˜ ๊ฒฐ๊ณผ์™€ ๊ทธ ์ด์œ ๋ฅผ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ฝ”๋“œ(dfs(i + 1, depth + 1)): ์ด ์ฝ”๋“œ๋Š” ํ˜„์žฌ ์ˆซ์ž i๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‹ค์Œ ์ˆซ์ž๋ฅผ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, i๊ฐ€ 1์ผ ๋•Œ ๋‹ค์Œ ์žฌ๊ท€ ํ˜ธ์ถœ์—์„œ๋Š” i + 1, ์ฆ‰ 2๋ถ€ํ„ฐ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด ๋ฐฉ์‹์€ ์ค‘๋ณต ์—†์ด ์˜ฌ๋ฐ”๋ฅธ ์กฐํ•ฉ์„ ๋งŒ๋“ค์–ด๋ƒ…๋‹ˆ๋‹ค.

์ž˜๋ชป๋œ ์ฝ”๋“œ(dfs(el + 1, depth + 1)): ๋งŒ์•ฝ i + 1 ๋Œ€์‹  el + 1์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด, ์žฌ๊ท€ ํ˜ธ์ถœ ์‹œ๋งˆ๋‹ค ์ดˆ๊ธฐ ์ˆซ์ž์ธ el์˜ ๋‹ค์Œ ์ˆซ์ž๋ฅผ ํƒ์ƒ‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด๋กœ ์ธํ•ด, ๋ชจ๋“  ์žฌ๊ท€ ํ˜ธ์ถœ์ด ๋™์ผํ•œ el์„ ๊ธฐ์ค€์œผ๋กœ ์ง„ํ–‰๋˜์–ด ์ค‘๋ณต๋œ ์ˆซ์ž๊ฐ€ ์„ ํƒ๋˜๊ฑฐ๋‚˜, ์˜ฌ๋ฐ”๋ฅธ ์กฐํ•ฉ์„ ์ƒ์„ฑํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ฒ˜์Œ el์ด 1์ด๋ผ๋ฉด ๋ชจ๋“  ์žฌ๊ท€ ํ˜ธ์ถœ์—์„œ el์ด 1์— ๊ณ ์ •๋˜์–ด ์ž˜๋ชป๋œ ์กฐํ•ฉ์„ ์ƒ์„ฑํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ, ์กฐํ•ฉ์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ˜„์žฌ์˜ ์ˆซ์ž i๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‹ค์Œ ์ˆซ์ž i + 1๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•ด์•ผ ํ•˜๋ฉฐ, el + 1์„ ์‚ฌ์šฉํ•˜๋ฉด ์žฌ๊ท€ ํ˜ธ์ถœ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ง„ํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.