μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

[Baekjoon] 15663번: N과 M (9)

hades1 2024. 8. 12. 22:13

πŸ₯… 문제

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

 

πŸ” 섀계

μ²˜μŒμ—λŠ” λ°±νŠΈλž˜ν‚Ήμ„ μ‚¬μš©ν•˜μ—¬ 사전 순으둜 λͺ¨λ“  경우λ₯Ό κ΅¬ν•œ ν›„, 쀑볡을 μ œκ±°ν•˜λŠ” 방식을 μ‚¬μš©ν–ˆμœΌλ‚˜, 문제 μ˜λ„μ— λ§žμ§€ μ•ŠλŠ” 것 κ°™μ•„ λ‹€λ₯Έ 방법을 κ³ λ―Όν–ˆλ‹€.

 

이 λ¬Έμ œμ—μ„œμ˜ 핡심은 닡을 κ΅¬μ„±ν•˜λŠ” μˆ˜μ—΄μ—μ„œ 같은 μΈλ±μŠ€μ—μ„œλŠ” μ€‘λ³΅λœ μˆ˜κ°€ 였면 μ•ˆλ˜κ³ , λ‹€λ₯Έ μΈλ±μŠ€μ—μ„œλŠ” 쀑볡이 κ°€λŠ₯ν•˜λ‹€. λ”°λΌμ„œ, 같은 μΈλ±μŠ€μ—μ„œ 쀑볡을 λ°©μ§€ν•˜λ„λ‘ κ·Έ μΈλ±μŠ€μ—μ„œ λ§ˆμ§€λ§‰μ— μ‚¬μš©ν•œ 수λ₯Ό μ €μž₯ν•˜μ—¬ λ‹€λ₯Έμ§€ 확인해야 ν•œλ‹€.

 

πŸ‘Š 풀이1

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

int n, m;
vector<int> number(8);
vector<bool> visited(8);
vector<int> temp;
vector<vector<int>> result;

void bt(int count) {
	if (count == m) {
		result.push_back(temp);
	}
	for (int i = 0; i < n; i++) {
		if (!visited[i]) {
			visited[i] = true;
			temp.push_back(number[i]);
			bt(count + 1);
			temp.pop_back();
			visited[i] = false;
		}
	}
}

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cin >> n >> m;
	for (int i = 0; i < n; i++) {
		cin >> number[i];
	}
	sort(number.begin(), number.begin() + n);
	
	bt(0);

	sort(result.begin(), result.end());
	result.erase(unique(result.begin(), result.end()), result.end());
	for (int i = 0; i < result.size(); i++) {
		for (int j = 0; j < m; j++) {
			cout << result[i][j] << " ";
		}
		cout << "\n";
	}
	
	return 0;
}

 

πŸ‘Š 풀이2

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

int n, m;
vector<int> number(8);
vector<bool> visited(8);
vector<int> temp;

void bt(int count) {
	if (count == m) {
		for (int i = 0; i < m; i++) {
			cout << temp[i] << " ";
		}
		cout << "\n";
	}
	int same_level_last = 0;
	for (int i = 0; i < n; i++) {
		if (!visited[i] && same_level_last != number[i]) {
			same_level_last = number[i];
			visited[i] = true;
			temp.push_back(number[i]);
			bt(count + 1);
			temp.pop_back();
			visited[i] = false;
		}
	}
}

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cin >> n >> m;
	for (int i = 0; i < n; i++) {
		cin >> number[i];
	}
	sort(number.begin(), number.begin() + n);
	
	bt(0);
	
	return 0;
}

 

πŸ“– 레퍼런슀

 

πŸ“ λ©”λͺ¨