본문 바로가기

ALGORITHM

백준 15650 N과 M (2) (Java)

1. 문제 링크

 

15650번: N과 M (2)

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

www.acmicpc.net

 

2. 문제 및 입출력예제

 

3. 문제 풀이

N과 M 문제를 조금만 바꾸면 된다.

카운트를 하는 c와 시작 값인 s를 이용해서 조합하면 된다.

 

4. 코드

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class Main {
	private static StringBuilder sb = new StringBuilder();
	private static int N;
	private static int M;
	private static int[] input;
	private static int[] numbers;
	private static boolean[] isSelected;
	private static ArrayList<int[]> list = new ArrayList<>();

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

		input = new int[N];
		numbers = new int[M];
		isSelected = new boolean[N+1];
		
		for(int i=0;i<N;i++) {
			input[i] = i+1;
		}
		
		permutation(0, 1);

		for(int[] numbers : list) {
			for(int i=0;i<numbers.length;i++) {
				sb.append(numbers[i]+" ");
			}
			sb.append("\n");
		}
		System.out.println(sb);
		sc.close();
	}

	private static void permutation(int c, int s) {
		if(c == M) {
			list.add(Arrays.copyOfRange(numbers, 0, numbers.length));
			return;
		}
		
		for(int i=s;i<=N;i++) {
			numbers[c] = i;
			permutation(c+1, i+1);
		}	
	}
}

 

'ALGORITHM' 카테고리의 다른 글

백준 14501 퇴사 (Java)  (0) 2023.02.12
백준 1244 스위치 켜고 끄기 (Java)  (0) 2023.02.11
백준 15649 N과 M (Java)  (0) 2023.02.09
백준 9095 1, 2, 3 더하기 (Java)  (0) 2023.02.08
백준 17478 재귀함수가 뭔가요? (Java)  (0) 2023.02.07