본문 바로가기
Algorithm/📖Baekjoon

#15650 N과 M (2)

by yewoneeee 2022. 6. 8.

# 문제

# 입력 및 출력

# 풀이

앞의 #15649 N과 M (1)문제에서 조금 변형된 문제다

앞의 문제와 기본적인 조건은 동일하나 오름차순 수열만 출력하도록 했다

처음엔 n==0일때 visit를 관리하면 될 줄 알았는데 그건 상관없는 내용이었고

그냥 dfs인자로 현재 반복문 인덱스를 넘겨주면 됨

그럼 n+1일때 반복문은 n일때보다 더 큰값만 조회하게 됨

 

#include <iostream>
#include <vector>
using namespace std;
vector<int> p;
int visit[9];
int N, M;

void print() {
	for (int i = 0; i < p.size(); i++) {
		cout << p.at(i) << " ";
	}
	cout << "\n";
}

void dfs(int n, int k) {
	if (n == M) {
		print();
		return;
	}
	for (int i = k + 1; i <= N; i++) { // i는 앞에서 넘겨준 k값보다 1 큰 수로 설정
		if (!visit[i]) {
			p.push_back(i);
			visit[i] = 1;
			dfs(n + 1, i); // 반복문 인덱스 i를 넘겨줌
			p.pop_back();
			visit[i] = 0;
		}
	}
}

int main() {
	cin >> N >> M;
	dfs(0, 0);
}

간단한 내용인데 은근 오래 걸렸다ㅋㅋ

'Algorithm > 📖Baekjoon' 카테고리의 다른 글

#10844 쉬운 계단 수  (0) 2022.06.09
#11726 2xn 타일링  (0) 2022.06.09
#15649 N과 M (1)  (0) 2022.06.08
#1021 회전하는 큐  (0) 2022.06.07
#16953 A → B  (0) 2022.06.06

댓글