[BOJ 1940] 주몽

xeonu·2022년 7월 4일
0

코딩테스트

목록 보기
4/7
post-thumbnail

문제링크

소스코드

#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    int n, m, input, cnt = 0;
    int f, r, check;
    cin >> n >> m;
    vector<short> v;
    for (int i = 0; i < n; i++) {
        cin >> input;
        v.push_back(input);
    }
    sort(v.begin(), v.end());

    f = 0;
    r = v.size() - 1;
    check = r;
    while (f < r) {
        if (v[f] + v[r] > m) {
            r--;
            continue;
        } else if (v[f] + v[r] == m) {
            cnt++;
            f++;
            check = r;
        } else {
            f++;
            r = check;
        }
    }
    cout<<cnt<<endl;


}

투포인터, 조합 등으로 풀 수 있지만 벡터를 정렬한 후 양 끝의 합이 m이 되는 시점을 찾는 방식으로 구했다.

profile
백엔드 개발자가 되기위한 여정

0개의 댓글