[백준 c++] 주몽

jw·2022년 9월 27일
0

백준

목록 보기
26/141
post-thumbnail

문제설명

https://www.acmicpc.net/problem/1940
고유번호를 가진 재료 n개가 주어지고 이것 중 2개를 합해서 m을 만들 수 있는 경우의 수를 구하는 문제다.

아이디어

정렬과 투포인터를 이용해서 풀면 된다.
v[start](0에서부터 시작한 인덱스값)+v[end](뒤에서부터 시작한 인덱스값)
1. m이면 cnt++
2. m보다 작으면 start++
3. m보다 크면 end--

전체 코드

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n, m;
vector<int> v;
int main()
{
    cin >> n >> m;
    for (int i = 0; i < n; i++)
    {
        int a;
        cin >> a;
        v.push_back(a);
    }
    
    sort(v.begin(), v.end());
    
    int start = 0, end = n - 1, cnt = 0;
    
    while (end > start)
    {
        if (v[start] + v[end] == m)
        {
            cnt++;
            start++;
            end--;
        }
        else if (v[start] + v[end] > m)
        {
            end--;
        }
        if (v[start] + v[end] < m)
        {
            start++;
        }
    }
    
    cout << cnt << "\n";
}

투포인ㅌㅓ 만세

profile
다시태어나고싶어요

0개의 댓글

관련 채용 정보