굥뷰를 햡시댜

[BOJ - 15664] N과 M(10) 본문

알고리즘 문제 풀이/BOJ 문제 풀이

[BOJ - 15664] N과 M(10)

GodZ 2019. 11. 13. 15:54

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

 

15664번: N과 M (10)

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

www.acmicpc.net

 

 

중복된 값을 허락하지 않고 뽑는 조합 입니다.

 

중복된 값을 처리하는 방법으로 map을 사용했습니다.

 

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <map>

using namespace std;

int n, m;
vector<int> vec, sel;
map<string, int> dict;

void dfs(int node) {
	if (sel.size() == m) {

		string temp;

		for (int i = 0; i < sel.size(); i++) {
			temp += to_string(sel[i]);
		}

		if (temp == "") return;
		if (dict[temp] != 0) return;
		else {
			dict[temp] += 1;

			for (int i = 0; i < sel.size(); i++) {
				printf("%d ", sel[i]);
			}
			printf("\n");
		}

		return;
	}

	for (int i = node; i < vec.size(); i++) {
		sel.push_back(vec[i]);
		dfs(i + 1);
		sel.pop_back();
	}
}

int main(void) {

	scanf("%d %d", &n, &m);

	for (int temp, i = 0; i < n; i++) {
		scanf("%d", &temp);
		vec.push_back(temp);
	}

	sort(vec.begin(), vec.end());

	dfs(0);

	getchar();
	getchar();

	return 0;
}

'알고리즘 문제 풀이 > BOJ 문제 풀이' 카테고리의 다른 글

[BOJ - 15666] N과 M(12)  (0) 2019.11.13
[BOJ - 15665] N과 M(11)  (0) 2019.11.13
[BOJ - 15663] N과 M(9)  (0) 2019.11.13
[BOJ - 15658] N과 M(8)  (0) 2019.11.13
[BOJ - 15656] N과 M(7)  (0) 2019.11.13
Comments