백준 3273 두 수의 합 / C++

이유참치·2025년 12월 15일

백준

목록 보기
100/249

문제 : 3273

풀이 point

정렬 및 투포인터를 사용한다. 맨앞의 요소와 맨뒤의 요소를 더했을 때
1. X 보다 크면 뒤의 인덱스를 한칸 땡긴다.
2. X 보다 작으면 앞의 인덱스를 한칸 땡긴다.
3. X와 같으면 앞과 뒤의 인덱스를 한칸 땡긴다.

풀이 방법

while문을 통해 인덱스를 가르키는 변수 i,j 를 통제하여 구현한다.

코드

//백준 3273, 두 수의 합

#include <iostream>
#include <algorithm>

//정렬, 앞 + 뒤 
//1. 원하는 값보다 작다 -> 앞 땡기기
//2. 원하는 값보다 크가 -> 뒤 땡기기
//3. 같다. ++ ans -> 앞 뒤 땡기기

int nums[100'000];

int main (){

    int N;
    std::cin >> N;

    for(int i{0}; i<N; ++i){
        std::cin >> nums[i];
    }

    int x;
    std::cin >> x;

    std::sort(nums, nums+N);
    int i{0}; int j{N-1}; int ans{0};
    while(i<j){
        if(nums[i] + nums[j] == x){
            ++ans;
            ++i; --j;
        }
        else if(nums[i] + nums[j] > x) --j;
        else if(nums[i] + nums[j] < x) ++i;
    }

    std::cout << ans;

    return 0;
}
profile
임아리 - 대학생

0개의 댓글