순열로 푸는 방법이 있을 것이고, 9명밖에 없으니 반복문을 사용하는 방법이 있을 것이다. 두 가지 방법 모두로 풀어보겠다.
9개의 크기를 가진 정수형 벡터에 1이라는 값을 2개 push, 0이라는 값을 7개 push하여 next_permutation 구문을 사용해 계산하는 방식이다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int arr[10];//아홉 난쟁이의 키를 저장하는 배열
int main()
{
for(int i=0; i<9; i++) cin>>arr[i];
vector <int> v;
for(int i=0; i<9; i++){
if(i<7) v.push_back(0);
else v.push_back(1);
}
sort(v.begin(), v.end());
do{
int val=0;
for(int i=0; i<9; i++){
if(v[i]==0)
val+=arr[i];
}
if(val==100) break;
}while(next_permutation(v.begin(), v.end()));
vector <int> ans;
for(int i=0; i<9; i++){
if(v[i]==0) ans.push_back(arr[i]);
}
sort(ans.begin(), ans.end());
for(int i=0; i<ans.size(); i++){
cout<<ans[i]<<'\n';
}
return 0;
}
9명의 일곱 난쟁이를 반복해가면서 두 명씩 제외해 답을 찾는 방식이다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int arr[10];//아홉 난쟁이의 키를 저장하는 배열
int main()
{
int sum=0;
for(int i=0; i<9; i++){
cin>>arr[i];
sum+=arr[i];
}
vector <int> v;
int status=0;
for(int i=0; i<9; i++){
for(int j=i+1; j<9; j++){
if(sum-arr[i]-arr[j]==100){
status=1;
for(int k=0; k<9; k++){
if(k!=i&&k!=j) v.push_back(arr[k]);
}
break;
}
}
if(status==1) break;
}
sort(v.begin(), v.end());
for(int i=0; i<v.size(); i++){
cout<<v[i]<<'\n';
}
return 0;
}