백준 - 15649번(N과 M (1))

최지홍·2022년 2월 7일
0

백준

목록 보기
31/145

문제 출처: https://www.acmicpc.net/problem/15649


문제

  • 자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.

    • 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열

import java.util.Scanner;

public class Main {

    private static StringBuilder result = new StringBuilder();

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        int M = scanner.nextInt();
        int[] nums = new int[N]; // 1 2 3
        boolean[] check = new boolean[N]; // false false false
        for (int i = 0; i < N; i++) {
            nums[i] = i + 1;
        }
        permutation(nums, check, 0, M, new StringBuilder());

        System.out.println(result);
    }

    private static void permutation(int[] nums, boolean[] check, int count, int M, StringBuilder sb) {
        if (count == M) {
            result.append(sb).append("\n");
            return;
        }

        for (int i = 0; i < nums.length; i++) {
            if (!check[i]) {
                check[i] = true; // 1을 뽑음
                sb.append(nums[i]).append(" ");
                permutation(nums, check, count + 1, M, sb);
                sb.setLength(sb.length() - 2);
                check[i] = false;
            }
        }
    }

}

  • 단순히 순열을 출력하는 문제였다.
  • 순열, 조합, 부분집합, 중복순열, 중복조합 코드는 외울 필요가 있다.
profile
백엔드 개발자가 되자!

0개의 댓글