Taene's
[백준] 브론즈1-일곱 난쟁이 C++ 2309번 본문
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;
}
'백준 > 브론즈' 카테고리의 다른 글
[백준] 브론즈2-트럭 주차 C++ 2979번 (0) | 2025.02.21 |
---|---|
[백준] 브론즈4-알파벳 개수 C++ 10808번 (0) | 2025.02.21 |
[백준] 브론즈1-평균 C++ 1546번 (0) | 2024.02.26 |
[백준] 브론즈2-재귀의 귀재 C++ 25501번 (0) | 2023.09.21 |
[백준] 브론즈3-수학-곱셈 C++ 2588번 (0) | 2023.08.23 |