백준 [2467] "용액"

Kimbab1004·2024년 4월 17일
0

Algorithm

목록 보기
34/102

이분 검색으로 쉽게 해결 할 수 있는 문제였다. 오랜만에 이분 검색 문제를 보니 바로 이분 검색을 생각하지 못해 양쪽 포인터로 무식하게 계산하여 메모리나 시간초과는 나지 않아도 정답을 구하지 못했는데 문제 풀이 힌트를 보고 이분 검색을 통해 해결 하였다.

오답

#include <iostream>
#include <algorithm>

using namespace std;
int n;
int solution[100001];

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> solution[i];
    }

    int result = 100000000;

    int startP = 0;
    int endP = n;
    int startRe;
    int endRe;

    while (startP < endP) {
        int now = solution[startP] + solution[endP];
        if (result > abs(now)) {
            result = abs(now);
            startRe = solution[startP];
            endRe = solution[endP];
        }
        if (now > 0) endP--;
        else startP++;
    }

    cout << startRe << " " << endRe << "\n";
    

    return 0;
}

정답

#include <iostream>
#include <algorithm>

using namespace std;
int n;
int solution[100001];

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> solution[i];
    }

    int result = 2000000001;

    int startP = 1;
    int endP = n;
    int startRe, endRe;

    while (startP < endP) {
        int now = solution[startP] + solution[endP];
        int num = abs(now);
        if (result >= num) {
            result = num;
            startRe = solution[startP];
            endRe = solution[endP];
        }
        if (now > 0) endP--;
        else startP++;
    }

    cout << startRe << " " << endRe << "\n";


    return 0;
}

0개의 댓글