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

[C++] 백준 15652번 : N과 M (4)

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

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

 

15652번: N과 M (4)

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

www.acmicpc.net


문제 풀이

 N과 M(2) 번과 (3) 번을 섞은 듯한 문제이다. 재귀 호출을 할 때 이전 기준값을 시작점으로 삼으면 이전 배열 값보다 크거나 같은 값을 출력할 수 있다. 

느낀 점

 실은 이번 코드도 (2)번에서 한 것처럼 조건문으로 경우를 따져서 값을 대입하는 방식으로 했었다. 채점 이후 더 나은 방법이 없을까 고민하다가 (2) 번 문제처럼 시작점을 따지는 방법으로 넘어갔다. 코드 길이가 확연히 차이가 났다 T.T

코드

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

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

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

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

댓글