본문 바로가기
알고리즘 문제 풀이

[백준] N과 M(2)

by pinok1o 2021. 4. 22.

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

문제 해석

  • 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열
  • 고른 수열은 오름차순이어야 한다

문제 풀이

N과 M (1) 문제를 조금더 응용해보자

이전 문제와 다르게 2 4 를 만들었으면 4 2를 만들면 안된다

만들어진 리스트를 가지고 있고 거기서 중복을 체크하는건 너무 비효율적

만들어진 수열을 잘 보면 항상 오름차순으로 만들어진 것을 확인할 수 있다

즉 자기 자신보다 큰 수로만 수열을 만들면 됨!!

package com.company;

import java.util.*;

public class Main {

    static int[] checked;
    static int N, D;
    static ArrayList<Integer> list;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        N = sc.nextInt();
        D = sc.nextInt();
        checked = new int[N + 1];
        list = new ArrayList<Integer>();

        dfs(1);

    }

    public static void dfs(int d){

        if(list.size() == D){
            for(Integer i : list){
                System.out.print(i + " ");
            }System.out.println();
        }

        for(int i = d; i <= N; i++){
            if(checked[i] != 1) {
                checked[i] = 1;
                list.add(i);

                dfs(i);
                checked[i] = 0;
                list.remove(list.size() - 1);
            }
        }
    }
}

'알고리즘 문제 풀이' 카테고리의 다른 글

[백준] 유기농 배추  (0) 2021.04.22
[백준] DFS와 DFS  (0) 2021.04.22
[백준] N과 M  (0) 2021.04.16
[백준] 모든 순열  (0) 2021.04.16
[프로그래머스] 2 x n 타일  (0) 2021.04.15

댓글