Java/Algorithm

[Java-Algorithm] 백준 15652 N과 M(4) 풀이

Jeong Jeon
반응형

1). 문제 : https://www.acmicpc.net/problem/15652

 

15652번: N과 M (4)

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

www.acmicpc.net

 

 

2). 풀이 : 

이어서 수열이 숫자 순서대로만 나와야 될때의 문제이다.

지난 번과 똑같이 이전 값을 기준으로 비교하면 된다..!

 

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


		int N = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken());

		int[] arr = new int[N];
		int[] output = new int[N];

		permute(arr, output, 0, M, -1);
		System.out.println(sb);
	}

	static void permute(int[] arr, int[] output, int depth, int cnt, int before) {
		if(depth == cnt) {
			print(output,cnt);
			return;
		}

		for (int i = 0; i < arr.length; i++) {
			arr[i] = i+1;
			if(before > arr[i]) {
				continue;
			}
			output[depth] = arr[i];
			permute(arr, output, depth+1, cnt, arr[i]);
		}
	}

	static void print(int[] output, int cnt) {
		for (int i = 0; i < cnt; i++) {
			sb.append(output[i]+" ");
		}
		sb.append("\n");
	}
반응형