728x90

문제

 

 

접근 방식

주어진 배열을 정렬하여 중복해서 선택할 때

M개의 수를 고르는 모든 경우를 출력하면 된다.

 

모든 수를 중복해서 계속 사용할 수 있기 때문에

사용 여부를 체크하거나 인덱스에 변화를 줄 필요 없이

계속해서 재귀호출과 M번의 반복문을 돌아주면 된다.

 

풀이

public class Main {

	private static StringBuilder sb = new StringBuilder();
	private static int n;
	private static int m;
	private static int[] arr;
	private static int[] sequence;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");

		n = Integer.parseInt(st.nextToken());
		m = Integer.parseInt(st.nextToken());

		st = new StringTokenizer(br.readLine(), " ");

		arr = new int[n];
		sequence = new int[m];

		for (int i = 0; i < n; i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}

		Arrays.sort(arr);

		createSequence(0);

		System.out.println(sb);
	}

	private static void createSequence(int size) {
		if (size == m) {
			for (int i = 0; i < m; i++) {
				sb.append(sequence[i]).append(" ");
			}

			sb.append("\n");

			return;
		}

		for (int i = 0; i < arr.length; i++) {
			sequence[size] = arr[i];
			createSequence(size + 1);
		}
	}
}

 

'Java > Algorithms' 카테고리의 다른 글

[백준] 15663번 : N과 M (9)  (0) 2023.10.30
[백준] 15657번 : N과 M (8)  (0) 2023.10.30
[백준] 15655번 : N과 M (6)  (0) 2023.10.29
[백준] 15654번 : N과 M (5)  (0) 2023.10.29
[백준] 15652번 : N과 M (4)  (0) 2023.10.29

+ Recent posts