백준 2230 수 고르기 (C++)

안유태·2023년 10월 16일
0

알고리즘

목록 보기
158/239

2230번: 수 고르기

투 포인터를 이용한 문제이다. 두 값의 차이가 M 이상인 최솟값을 구해야하므로 이번엔 첫 인덱스부터 점점 범위를 넓혀가는 식으로 값을 구해보았다. 먼저 입력받은 값을 정렬을 해준 후 start = 0ebd = 1 에서 시작해 반복문을 돌며 두 값의 차이가 M보다 작을 경우 end++를 해준다. 차이가 M과 같다면 반복문을 끝내고 출력을 해주게 된다. 둘 다 아니라면 result와 비교해 작은 값을 저장해주고 start++를 해준다. 어렵지 않게 풀 수 있었던 문제였다.



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

using namespace std;

int N, M, result = 2000000001;
vector<int> v;

void solution() {
    sort(v.begin(), v.end());

    int start = 0, end = 1;

    while (start < N && end < N) {
        int dif = v[end] - v[start];

        if (dif < M) {
            end++;
            continue;
        }
        else if (dif == M) {
            result = dif;
            break;
        }

        result = min(result, dif);
        
        start++;
    }

    cout << result;
}

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

    cin >> N >> M;

    int a;
    for (int i = 0; i < N; i++) {
        cin >> a;
        v.push_back(a);
    }

    solution();

    return 0;
}
profile
공부하는 개발자

0개의 댓글