쌓고 쌓다

[백준] 일곱 난쟁이 2309번 C++ 풀이 본문

알고리즘/백준

[백준] 일곱 난쟁이 2309번 C++ 풀이

승민아 2022. 1. 4. 14:56

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

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> v;
bool visit[10];
bool solve(int idx, int cnt,int sum) //(현재 인덱스,이제껏 선택한 개수, 이제껏 총합)
{

	if (cnt == 7 && sum == 100) // 조건 부합시 현재 방문한것들 모두 출력
	{
		for (int i = 0; i < 9; i++)
			if (visit[i] == true)
				cout << v[i] << "\n";
		return true;
	}

	for (int i = idx+1; i < 9; i++) // idx+1부터 모두 방문
	{
		visit[i] = true; 
		if (solve(i, cnt + 1, sum + v[i]) == true) // 정답 찾았을 시
			return true;
		visit[i] = false;
	}

	return false;
}
int main(void)
{
	for (int i = 0; i < 9; i++)
	{
		int num;
		cin >> num;
		v.push_back(num);
	}
    
	sort(v.begin(), v.end());

	for (int i = 0; i < 9; i++) {
		visit[i] = true;
		if (solve(i, 1, v[i]) == true)
			break;
		visit[i] = false;
	}
}
Comments