본문 바로가기
문제 풀이/백준(BOJ)

[C++] 백준 15650번 : N과 M (3)

by 희조당 2021. 5. 23.
728x90

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

 

15651번: N과 M (3)

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

www.acmicpc.net


문제 풀이

 N과 M (1)에서 visited  배열을 이용해서 중복된 숫자가 나오는 것을 방지했다. 그것만 제외해주면 동일한 문제

느낀점

이번 문제는 '중복 순열'을 푸는 방법이었다. 사실 1번 2번 문제에서 순열, 조합을 따지지는 않았지만 이번 문제를 풀 때 순열과 조합이 관련된 문제라는 것을 알고 사전에 훑어보고 들어갔다.

코드

#include <iostream>
#define MAX 8
using namespace std;

int n, m;
int arr[MAX] = { 0, };

void dfs(int cnt) {
	if (cnt == m) {
		for (int i = 0; i < m; i++) {
			cout << arr[i] << " ";
		}
		cout << "\n";
		return;
	}

	for (int i = 0; i < n;i++) {
		arr[cnt] = i + 1;
		dfs(cnt + 1);
	}
}

int main() {
	cin >> n >> m;
	dfs(0);
}

댓글