Algorithm/backjoon

[백준] 2309번 일곱 난쟁이 (Python,C++)

유쾌한고등어 2023. 2. 12. 15:12

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

 

2309번: 일곱 난쟁이

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

www.acmicpc.net


SOLUTION CODE

# PYTHON

1) Combination

from itertools import combinations
    
# arr=[]
# for i in range(9):
#     arr.append(int(input()))
heights = [int(input()) for _ in range(9)]

for combi in combinations(heights,7):
    if sum(combi)==100:
        for height in sorted(combi):
            print(height)
            
        break

 

2) 다른 풀이

heights=[int(input()) for _ in range(9)]
heights.sort()
tot = sum(heights)
flag = False
def f():
    for i in range(8):
        for j in range(i+1,9):
            if tot - heights[i] - hisights[j]==100:
                for k in range(9):
                    if i !=k and j !=k:
                        print(k)
                
                return

f()

# C++

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

int arr[9];
int res[7];

int main()
{
    int sum = 0;
    for (int i = 0; i < 9; i++)
    {
        cin >> arr[i];
    }

    sort(arr, arr + 9);

    do
    {
        int sum=0;
        for(int i=0;i<7;i++){
            sum+=arr[i];
        }
        
        if(sum==100){
            for(int j=0;j<7;j++){
                res[j] = arr[j];
            }
            sort(res,res+7);
            for(int j=0;j<7;j++){
                cout<<res[j]<<'\n';
            }
            return 0;
        }

    } while (next_permutation(arr,arr+9));

    return 0;
}