본문 바로가기

코딩테스트/JAVA

[백준 JAVA] 15650번: N과 M (2) - 중복 없는 조합

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

 

아까는 순열 지금은 조합인듯하다.

 

한번 사용한 조합은 다시 사용하지 않는다고 이해하면 될꺼같다.

 

숫자가 더이상 작아지지 않는 것을 이용해서 for 문에 i값을 조정해주면 될꺼같다.

 

하지만 아까는 n과, m값만을 받아왔기 때문에 조합에서는 이전에 어떤값이 들어왔는지 다음 재귀 함수에 알아야 하므로 함수문에 at을 추가해 주었다 . 또한 visit는 삭제해주었다.

 

import java.util.Scanner;

public class Main {

	public static int[] arr;
	public static int n, m;

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);

		n = sc.nextInt();
		m = sc.nextInt();

		arr = new int[m];
		dfs(1, 0);

	}

	public static void dfs(int at, int depth) {
		if (depth == m) {
			for (int val : arr) {
				System.out.print(val + " ");
			}
			System.out.println();
			return;
		}

		for (int i = at; i <= n; i++) {
			
			arr[depth] = i;
			dfs(i + 1, depth + 1);

		}
	}
}

https://st-lab.tistory.com/115 

 

[백준] 15650번 : N과 M (2) - JAVA [자바]

www.acmicpc.net/problem/15650 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열

st-lab.tistory.com

이분꺼를 참고해서 풀었다.