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

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

백준 2309 일곱 난쟁이입니다.

최근 코테 예정이 없어서 느슨했지만 그래도 풀기위해 간단히 풀어본 문제입니다.

 

풀이입니다.

단수히 9명의 난쟁이 중 7 난쟁이를 골라서 합이 100인지를 dfs를 돌면서 브루트포스로 확인하면 되는 문제입니다.

 

#include<bits/stdc++.h>
#define endl '\n'

using namespace std;
vector<int> v;
int visit[9],arr[9];
void dfs(int idx, int cnt, int sum) {
    if(cnt == 7) {
        if(sum == 100){
            sort(v.begin(), v.end());
            for(int i=0;i<v.size();i++) cout << v[i] << ' ';
            exit(0);
        }
        return;
    }

    for(int i = idx+1; i<9;i++) {
        if(i>=9 || visit[i]) continue;
        visit[i] = 1;
        v.push_back(arr[i]);
        dfs(i, cnt+1, sum+arr[i]);
        visit[i] = 0;
        v.pop_back();
    }

}
int main() {

    for(int i=0;i<9;i++) cin >> arr[i];
    for(int i=0;i<3;i++) {
        visit[i] = 1;
        v.push_back(arr[i]);
        dfs(i, 1, arr[i]);
        visit[i] = 0;
        v.pop_back();
    }
}

'알고리즘 > PS' 카테고리의 다른 글

[백준 2457] 공주님의 정원  (0) 2021.01.05
[프로그래머스] 보석 쇼핑  (0) 2021.01.03
[백준 2470] 두 용액  (0) 2021.01.01
[백준 1806] 부분합  (0) 2021.01.01
[백준 20167] 꿈틀꿈틀 호석 애벌레 - 기능성  (0) 2020.12.29

+ Recent posts