[백준] #2170

HyeonMin Kim·2024년 6월 9일
post-thumbnail

이번 문제는 선긋기 문제입니다.

위의 그림은 예제의 이해를 돕기 위한 그림입니다.
첫번째 줄에 몇개의 선을 그을지 입력 한 후에 시작점과 끝점을 입력해서 결과로 선의 길이를 출력하는 것입니다. 그림에서도 총 길이가 1~5 6~7이니 길이가 5가 됩니다.

문제를 풀면서 런타임에러나 시간초과가 떠서
ios::sync_with_stdio(false); cin.tie(NULL); "\n"

을 사용합니다.

이후 벡터를 사용해서 시작점과 끝점을 가지는 pair로 만들어주고 sorting을 해줍니다
sorting이 되면 각 벡터를 순차적으로 탐색하면서 자신의 끝점이 다음의 시작점보다 크다면 다음의 끝점을 end의 값에 할당해주는 식으로 진행이 되고 아니라면 기존의 선이 끝이 났다는 것이니 ans라는 변수에 추가를 하게 되는 알고리즘으로 진행됩니다.

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

using namespace std;
int n;
vector<pair<int, int>> arr;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        int x, y;

        cin >> x >> y;

        arr.push_back(make_pair(x, y));
    }
    sort(arr.begin(), arr.end());

    int ans = 0;
    int start = arr[0].first, end = arr[0].second;

    for (int i = 1; i < n; i++)
    {
        int s = arr[i].first, e = arr[i].second;
        if (end >= s)
        {
            end = max(e, end);
        }
        else
        {
            ans += (end - start);
            start = s, end = e;
        }
    }

    ans += (end - start);
    cout << ans << "\n";

    return 0;
}

0개의 댓글