알고리즘/BOJ

백준 3273번 두 수의 합

꾸준함. 2019. 2. 10. 15:00

문제 링크입니다: https://www.acmicpc.net/problem/3273


배열을 오름차순으로 정렬한 뒤 이분 탐색을 통해 두 수의 쌍을 구해주면 되는 문제였습니다.

'쌍'을 구해야하기 때문에 구한 값을 반으로 나눈 뒤 출력해주는 것이 핵심이였습니다.


#include <iostream>

#include <algorithm>

using namespace std;

 

const int MAX = 100000;

 

int arr[MAX];

 

int main(void)

{

        ios_base::sync_with_stdio(0);

        cin.tie(0);

        int N, X;

        cin >> N;

 

        for (int i = 0; i < N; i++)

                 cin >> arr[i];

        cin >> X;

       

        sort(arr, arr + N);

        int result = 0;

        for (int i = 0; i < N; i++)

        {

                 int low = 0, high = N - 1;

                 while (low <= high)

                 {

                         int mid = (low + high) / 2;

                         if (arr[mid] == X - arr[i])

                         {

                                 result++;

                                 break;

                         }

                         else if (arr[mid] < X - arr[i])

                                 low = mid + 1;

                         else

                                 high = mid - 1;

                 }

        }

        //이 부분이 핵심

        cout << result / 2 << "\n";

        return 0;

}


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형