[ 다먹살 ]/- Coding

[백준] 15651 N과 M(3)

엉망으로살기 2021. 10. 8. 16:09
반응형

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

 

15651번: N과 M (3)

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

www.acmicpc.net

 

이 문제는 N과 M(1)과 비교했을 때 중복허용 차이만 있어서 바로 visit 체크하는 부분을 제외하고 제출했다. 그랬더니 시간 초과가 떠서 이유를 생각해보니 최대 7*7 경우를 가질 수 있다는 것을 알게 되었고, 예전에 다른 문제에서 사용했던 StringBuilder를 사용했더니 바로 해결이 되었다.


문제 및 입출력

 


예제

 


코드

import java.util.Scanner;

public class Main
{
    static StringBuilder sb = new StringBuilder();
    
    // n개의 숫자 중 m개를 뽑는 사전식 순열
    public static void permutation(String value, boolean[] visit, int n, int m, int cnt)
    {
        if(cnt==m)
        {
            sb.append(value + "\n");
            return;
        }

        for(int i=1; i<=n ; i++)
        {
            // 첫 번째 값을 넣을 때와 그 외의 경우를 나눠서 value 설정
            if(cnt==0)
            {
                permutation(i + "", visit, n, m, cnt+1);
            }
            else
            {
                permutation(value + " " + i, visit, n, m, cnt+1);
            }
        }
    }
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();

        permutation("", new boolean[n], n, m, 0);
        System.out.println(sb.toString());
        sc.close();
     }
}

 

반응형