백준 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;
}

 

 

 

실행화면 1
실행화면 2

 

반응형