Algorithm/백준 자바

백준 15650 자바 (N 과 M(2))

눈오는1월 2024. 4. 22. 17:58
728x90

<문제>

https://www.acmicpc.net/problem/15650

 

15650번: N과 M (2)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

 

<풀이>

1. 어떤 접근으로 문제를 접근하려고 했는지

   nCr의 경우의 수를 출력하는 프로그램이다.

   조합은 순서가 상관없으므로 매개변수에 v라는 값을 통해 한번 출력을 했을 때 순서가 바뀌어서 출력되는 부분을 막는다.

 

2. 문제를 해결하기 위한 기능

    nCr 기능 구현

    

<코드>

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

public class Main {

    public static int n, m;

    public static ArrayList<Integer> arrayList = new ArrayList<>();


    public static void print() {
        for(int i = 0; i < arrayList.size(); i++) {
            System.out.print(arrayList.get(i) + " ");
        }
        System.out.println();
    }

    public static void dfs(int v, int h) {
        if(h == m + 1) {
            print();
            return;
        }
        for(int i = v; i <= n; i++) {
            arrayList.add(i);
            dfs(i + 1, h + 1);
            arrayList.remove(arrayList.size() - 1);

        }
    }

    public static void main(String[] args)throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st= new StringTokenizer(br.readLine());

        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());

        dfs(1,1);
    }
}

 

728x90