백준 15656 'N과 M (7)'

Bonwoong Ku·2024년 4월 11일
0

알고리즘 문제풀이

목록 보기
97/110

아이디어

  • 기본적으로 입력을 오름차순 정렬 후 순열을 이용한 브루트포스 문제
  • 문제에서 주어진 수는 모든 다른 수라고 보장하였으므로, 중복된 수열이 나오는 일은 절대 없다. 따라서 이에 대해 처리하지 않아도 된다.

코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
	static BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
	static StringBuilder sb = new StringBuilder();
	static StringTokenizer tk = null;

	static int N, M, A[];
	static int[] buf;
	
	public static void main(String[] args) throws Exception {
		tk = new StringTokenizer(rd.readLine());
		N = Integer.parseInt(tk.nextToken());
		M = Integer.parseInt(tk.nextToken());
		
		A = new int[N];
		tk = new StringTokenizer(rd.readLine());
		for (int i=0; i<N; i++)
			A[i] = Integer.parseInt(tk.nextToken());
		
		Arrays.sort(A);
		
		buf = new int[M];
		
		for (int i=0; i<N; i++)
			perm(i, 0);

		System.out.println(sb);
	}

	static void perm(int idx, int d) {
		buf[d] = A[idx];
		
		if (d == M - 1) {
			for (int i=0; i<M; i++) {
				sb.append(buf[i]).append(' ');
			}
			sb.append('\n');
			return;
		}

		for (int i=0; i<N; i++) {
			perm(i, d + 1);
		}
		
	}
}

메모리 및 시간

  • 메모리: 123196 KB
  • 시간: 616 ms

리뷰

  • 이전에 푼 'N과 M (12)'에서 비내림차순 조건을 풀면 풀릴 줄 알았는데, 이 조건이 꽤 많은 가지치기를 해준다는 것을 알지 못했었다.
profile
유사 개발자

0개의 댓글