본문 바로가기
알고리즘/백준(JAVA)

[백준] 15652번: N과 M(4) [JAVA-자바]

by 콘텐츠박스 2021. 1. 19.
반응형

📝문제

www.acmicpc.net/problem/15652

 

15652번: N과 M (4)

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

www.acmicpc.net

💡Problem

  • 중복 순열을 구하며 비내림차순을 만족해야 한다.

🔑Solution

  • 이전값(idx)을 재귀로 넘겨서 현재 값이 이전 값보다 클 때만 출력한다.

💻Code

import java.util.*;

public class Main {
	static int[] num;
	static boolean[] visited;

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

		num = new int[N + 1];
		visited = new boolean[N + 1];
		dfs(N, M, 0, 0);

	}

	static void dfs(int N, int M, int count, int idx) {
		if (count == M) {
			for (int i = 0; i < M; i++) { // 현재 결과배열을 출력
				System.out.print(num[i] + " ");
			}
			System.out.println("");
			return; // DFS 종료
		}
		for (int i = 1; i <= N; i++) {

			if (idx <= i) {
				num[count] = i;
				dfs(N, M, count + 1, num[count]);
			}
		}
	}
}

 

댓글