9명 중에 2명을 뽑아야 한다.
전체 9명의 숫자의 합을 totalsum이라고 구해둔다.
totalsum - 2명의 숫자를 해야 한다. 2명을 고르려면 이중 반복문 또는 next_permutation 을 쓰면 된다.
크기 9의 배열 2개가 필요하다.
난쟁이숫자 배열 hat {7, 8, 10, 13, 15, 19, 20, 23, 25}
조합 배열 check {0, 0, 0, 0, 0, 0, 0, 1, 1} -> 난쟁이 2개 조합을 골라야하니까 1이 2개
check 배열을 next_permutation() 하면, 1의 위치가 달라진다. 따라서 1의 위치에 해당하는 숫자를 선택하면 된다.
주의 : next_permutation()을 쓸 때, 초기에 배열이 오름차순으로 정렬되어 있어야한다.
[불가능] check {1, 1, 0, 0, 0, 0, 0, 0, 0} <- 이것이 이미 next_permutation()의 마지막 결과물이기 때문이다.
만약 배열 초기값이 {1, 2, 3} 이라면, next_permutation()의 마지막 결과는 {3, 2, 1}이 된다.
#include <bits/stdc++.h>
using namespace std;
int totalsum;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
vector<int> hat(9);
vector<int> check(9);
check[7] = check[8] = 1;
for(int i = 0; i < 10; i++){
cin >> hat[i]; totalsum += hat[i];
}
do{
int temp = 0;
for(int i = 0; i < 9; i++){
if(check[i])temp += hat[i];
}
if((totalsum - temp) == 100){
for(int i = 0; i < 9; i++){
if(!check[i]) cout << hat[i] << '\n';
}
}
}while(next_permutation(check.begin(), check.end()));
return 0;
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
다이얼 백준 5622번 c++ (0) | 2022.02.21 |
---|---|
네 번째 점 백준 3009번 c++ (0) | 2022.02.21 |
색종이 만들기 백준 2630번 c++ (0) | 2022.02.20 |
최소 힙 백준 1927번 c++ (0) | 2022.02.19 |
ATM 백준 11399번 c++ (0) | 2022.02.19 |