백준 algorithm
백준 2309 - 일곱난쟁이
cosmohoo
2020. 5. 16. 00:56
반응형

=> Brute Force 문제이다.
=> 모든 경우의 수를 탐색해보면 알 수 있다.
알고리즘은 아래와 같다.
-
배열을 입력받으며, 전체 난쟁이(9명)들 키의 합을 구한다.(sum)
-
배열을 sort 시킨다.
-
STL을 써도 무방한다. ( 이 경우, 배열의 크기 또한 정해져 있다.)
-
해당 배열을 i가 index 0부터 9까지 탐색한다, j는 i+1부터 9까지 탐색한다.
-
i, j index 값을 sum에서 뺏을 때, 100이 되는 i와 j를 구한다.
=> 위의 방법을 통해 제외되는 두 명의 난쟁이를 구할 수 있다.
*** 본인은 원하는 난쟁이를 구한 경우, 프로그램을 끝내지 않고, 모든 경우의 수를 탐색하도록 하여 여러 번 틀렸었다.
*** 원하는 i와 j를 찾았을 경우, 프로그램을 중지시켜주는 것이 정답을 맞혀주는 길이며, 효율성을 올릴 수 있는 방법이다.
<code>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int arr[9];
int sum=0;
for(int i=0; i<9; i++)
{
cin >> arr[i];
sum += arr[i];
}
sort(arr, arr+9);
for(int i=0; i<9; i++)
{
for(int j= i+1; j<9; j++)
{
if(sum - arr[i] - arr[j] == 100)
{
for(int k=0; k<9; k++)
{
if(k !=i && k != j)
{
cout << arr[k]<<'\n';;
}
}
return 0;
}
}
}
return 0;
}


반응형