나의 공부장

백준 2309 일곱 난쟁이 [BruteForce] 본문

알고리즘/BOJ

백준 2309 일곱 난쟁이 [BruteForce]

꾸준한나 2020. 4. 24. 20:50

문제 링크: https://www.acmicpc.net/problem/2309

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

문제 풀이

9명의 난쟁이 중에서 2명이 공주에게 거짓말하고 있습니다.

2명을 찾는 방법은 9명의 난쟁이들의 키를 모두 더한 값에서 2명씩 빼면서 그 결과가 100이 되는 경우를 찾으면 됩니다.

 

[9명의 난쟁이들의 키의 합] - [거짓 난쟁이 후보 1] - [거짓 난쟁이 후보 2] = 100

 

소스 코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
	//freopen("input.txt", "r", stdin);
	vector<int> v(9, 0);
	int total = 0;
	for (int i = 0; i < 9; i++)
	{
		cin >> v[i];
		total += v[i];
	}
		
	bool find = false;
	int idx1, idx2;
	for (int i = 0; i < 9; i++)
	{
		for (int j = 0; j < 9; j++)
		{
			if (i != j)
			{
				if (total - v[i] - v[j] == 100)
				{
					find = true;
					idx1 = i;
					idx2 = j;
					break;
				}
			}
		}

		if (find) break;
	}

	vector<int> ans;
	for (int i = 0; i < 9; i++)
	{
		if (v[i] != v[idx1] && v[i] != v[idx2])
			ans.push_back(v[i]);
	}

	sort(ans.begin(), ans.end());
	for (int i = 0; i < ans.size(); i++)
		cout << ans[i] << '\n';
	return 0;
}