본문 바로가기
문제/백준

c++ 백준_15666_"N과 M(12)"

by 나 진짜 못차마 2023. 6. 9.
728x90

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

 

15666번: N과 M (12)

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

www.acmicpc.net

 

중복 제거를 위해

string과 set을 활용하려 했다.

근데 string을 사용하니

1 11 1111 111 과 같을 때 잘 돌아가지 않았다.

그래서 vector 와

중복 방지를 위한 set을 활용하여 해결하였다.

 

#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;

int N, M;
int number[8];
set<vector<int>> st;

void DFS(int depth, int idx, vector<int> result) {

	if (depth == M) {

		if (st.find(result) != st.end())
			return;
		st.insert(result);

		for (int i = 0; i < M; i++) {
			cout << result[i] << " ";
		}
		cout << "\n";
		return;
	}

	for (int i = idx; i < N; i++) {
		result.push_back(number[i]);
		DFS(depth + 1,i , result);
		result.pop_back();
	}

}

int main(void) {

	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);


	cin >> N >> M;


	for (int i = 0; i < N; i++) {
		cin >> number[i];
	}

	sort(number, number + N);

	vector<int> result;
	DFS(0,0, result);

}

728x90

'문제 > 백준' 카테고리의 다른 글

c++ 백준_14938_"서강그라운드"  (0) 2023.06.09
c++ 백준_12851_"숨바꼭질 2"  (0) 2023.06.09
c++ 백준_2448_"별 찍기 - 11"  (0) 2023.06.09
c++ 백준_13172_"Σ"  (0) 2023.06.09
c++ 백준_11054_"가장 긴 바이토닉 부분 수열"  (0) 2023.06.09