본문 바로가기

알고리즘 문제

[알고리즘 문제/C++]백준 1449번 : 수리공 항승

문제 링크 : https://www.acmicpc.net/problem/1449

 

1449번: 수리공 항승

첫째 줄에 물이 새는 곳의 개수 N과 테이프의 길이 L이 주어진다. 둘째 줄에는 물이 새는 곳의 위치가 주어진다. N과 L은 1,000보다 작거나 같은 자연수이고, 물이 새는 곳의 위치는 1,000보다 작거나

www.acmicpc.net

그리디알고리즘과 정렬을 활용하는 문제입니다.

코드

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main()
{
    int N, L;
    vector<int> v;
    cin >> N >> L;

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

    sort(v.begin(), v.end());
    int f = 0;
    int count_tape = 0;

    for(int i = 1; i < N; i++)
    {
        if(L-1 < v[i]-v[f])
        {
            count_tape++;
            f=i;
        }
        if(i == (N - 1))
        {
            count_tape++;
        }
    }

    if(N == 1)
    {
        cout << 1 << endl;
    }   
    else
    {
        cout << count_tape << endl;
    }
    return 0;
}