본문 바로가기
백준

[백준 2309] 일곱 난쟁이, c++

by 황인태(intaehwang) 2020. 9. 8.
반응형

www.acmicpc.net/problem/2309

 

2309번: 일곱 난쟁이

아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.

www.acmicpc.net

진짜 일곱 난쟁이를 찾는 문제 총 9명중 7명을 고르는 문제다. 문제의 조건 중 일곱 난쟁이의 키의 합이 100이라고 한다. 따라서 7명을 고르는 모든 경우의 수를 확인하면서 7명의 합이 100일 때 오름차순으로 출력하고 종료를 하면 된다.

문제 해결을 위해 next_permutation()을 이용하였다. { 0, 0, 1, 1, 1, 1, 1, 1, 1 }으로 만들 수 있는 모든 경우의 수를 만들고 1일 때 해당 위치의 값을 더하여 문제를 해결하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <cstdio>
#include <algorithm>
#include <vector>
 
using namespace std;
 
int main() {
    int t = 9;
    vector<int> v, u;
    while (t--) {
        int tmp;
        scanf("%d"&tmp);
        v.push_back(tmp);
    }
    for (int i = 0; i < 2; i++) {
        u.push_back(0);
    }
    for (int i = 0; i < 7; i++) {
        u.push_back(1);
    }
    
    do {
        int total = 0;
        vector<int> result;
        for (int i = 0; i < u.size(); i++) {
            if (u[i] == 1) {
                total += v[i];
                result.push_back(v[i]);
            }
        }
        if (total == 100) {
            sort(result.begin(), result.end());
            for (int i = 0; i < result.size(); i++) {
                printf("%d\n", result[i]);
            }
            return 0;
        }
    }while (next_permutation(u.begin(), u.end()));
}
cs

 

반응형

'백준' 카테고리의 다른 글

[백준 1759] 암호 만들기, C++  (0) 2020.09.17
[백준 3085] 사탕 게임, C++  (0) 2020.09.08
[백준 2668] 숫자고르기, c++  (0) 2020.07.26
[백준 15685] 드래곤 커브, C++  (0) 2020.05.16
[백준 14499] 주사위 굴리기, C++  (0) 2020.05.11
Buy me a coffeeBuy me a coffee

댓글