Taene's

[백준] 브론즈1-일곱 난쟁이 C++ 2309번 본문

백준/브론즈

[백준] 브론즈1-일곱 난쟁이 C++ 2309번

taene_ 2025. 2. 21. 22:56

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

 

1-1. 조합(9C7), 재귀로 푼 답

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

vector<int> cm;
vector<int> answer;

void combi(int depth, vector<int>& cm, vector<int>& ans)
{
	if (ans.size() == 7)
	{
		int sum = 0;
		for (auto i : ans)
			sum += i;

		if (sum == 100)
		{
			sort(ans.begin(), ans.end());
			for (auto i : ans)
				cout << i << '\n';
			
			exit(0);
		}

		return;
	}

	for (int i = depth; i < cm.size(); i++)
	{
		ans.push_back(cm[i]);
		combi(i + 1, cm, ans);
		ans.pop_back();
	}
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

	int temp;
	for (int i = 0; i < 9; i++)
	{
		cin >> temp;
		cm.push_back(temp);
	}
	combi(0, cm, answer);

	return 0;
}

 

1-2. 조합(9C2), 재귀로 푼 답

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

vector<int> cm;
vector<int> answer;
int allSum = 0;

void combi(int depth, int allSum, vector<int>& cm, vector<int>& ans)
{
	if (ans.size() == 2)
	{
		int sum = 0;
		for (auto i : ans)
			sum += i;

		if (allSum - sum == 100)
		{
			sort(cm.begin(), cm.end());
			for (auto i : cm)
			{
				if (i == ans[0])
					continue;
				if (i == ans[1])
					continue;
				cout << i << '\n';
			}

			exit(0);
		}

		return;
	}

	for (int i = depth; i < cm.size(); i++)
	{
		ans.push_back(cm[i]);
		combi(i + 1, allSum, cm, ans);
		ans.pop_back();
	}
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

	int temp;
	for (int i = 0; i < 9; i++)
	{
		cin >> temp;
		allSum += temp;
		cm.push_back(temp);
	}
	combi(0, allSum, cm, answer);

	return 0;
}

 

1-3. 조합, 2중 for문으로 푼 답

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

int a[9];
int sum;
vector<int> v;
pair<int, int> ret;

void solve()
{
	for (int i = 0; i < 9; i++)
	{
		for (int j = 0; j < i; j++)
		{
			if (sum - a[i] - a[j] == 100)
			{
				ret = { i,j };
				return;
			}
		}
	}
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

	for (int i = 0; i < 9; i++)
	{
		cin >> a[i];
		sum += a[i];
	}
	solve();

	for (int i = 0; i < 9; i++)
	{
		if (ret.first == i || ret.second == i)
			continue;
		v.push_back(a[i]);
	}

	sort(v.begin(), v.end());
	for (int i : v)
		cout << i << '\n';

	return 0;
}
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int sum;
vector<int> arr(9);

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

	for (int i = 0; i < 9; i++)
	{
		cin >> arr[i];
		sum += arr[i];
	}

	for (int i = 0; i < 9; i++)
	{
		for (int j = 0; j < i; j++)
		{
			if (arr[i] + arr[j] == (sum - 100))
			{
				arr.erase(arr.begin() + i);
				arr.erase(arr.begin() + j);
				sort(arr.begin(), arr.end());
				for (auto i : arr)
					cout << i << '\n';

				return 0;
			}
		}
	}

	return 0;
}

 

2. 순열, next_permutation으로 푼 답

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

int a[9];

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

	for (int i = 0; i < 9; i++)
		cin >> a[i];

	int size = sizeof(a) / sizeof(a[0]);
	sort(a, a + size);

	do
	{
		int sum = 0;
		for (int i = 0; i < 7; i++)
			sum += a[i];

		if (sum == 100)
			break;
	} while (next_permutation(a, a + size));

	for (int i = 0; i < 7; i++)
		cout << a[i] << '\n';

	return 0;
}