백준 2309번: 일곱 난쟁이 (C++)

2023. 1. 21. 03:01알고리즘/브루트포스

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

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

풀이

그냥 완전 탐색으로 풀어도 되지만 순열 연습용으로 풀었다.

 

우선 난쟁이들을 정렬하고 순열을 돌려주었다.

그리고 앞의 7명의 값을 더했을 때 100이 되면 종료시키는 방법으로 구현했다.

 

 

전체 코드

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

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

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

    sort(Dwarf, Dwarf + 9);

    do {
        for (int i = 0; i < 7; i++) sum += Dwarf[i];
        if (sum == 100) {
            for (int i = 0; i < 7; i++) cout << Dwarf[i] << '\n';
            return 0;
        }
        sum = 0;
    } while (next_permutation(Dwarf, Dwarf + 9));
}