반응형
문제
매우 큰 도화지에 자를 대고 선을 그으려고 한다. 선을 그을 때에는 자의 한 점에서 다른 한 점까지 긋게 된다. 선을 그을 때에는 이미 선이 있는 위치에 겹쳐서 그릴 수도 있는데, 여러 번 그은 곳과 한 번 그은 곳의 차이를 구별할 수 없다고 하자.
이와 같은 식으로 선을 그었을 때, 그려진 선(들)의 총 길이를 구하는 프로그램을 작성하시오. 선이 여러 번 그려진 곳은 한 번씩만 계산한다.
입력
첫째 줄에 선을 그은 횟수 N(1≤N≤1,000,000)이 주어진다. 다음 N개의 줄에는 선을 그을 때 선택한 두 점이 주어진다. 선택한 지점은 -1,000,000,000 이상 1,000,000,000 이하의 정수이다.
출력
첫째 줄에 그은 선의 총 길이를 출력한다.
마지막 길이도 결과에 더해주어야함.
#include<iostream>
#include<queue>
#include<vector>
#include<string.h>
#include<algorithm>
using namespace std;
const int INF = 1000000001;
int N;
int main() {
vector<pair<int, int> > arr;
cin >> N;
for (int i = 0; i < N; i++)
{
int a, b;
scanf("%d %d", &a, &b);
arr.push_back({ a,b });
}
sort(arr.begin(), arr.end());
int l = -INF;
int r = -INF;
long long result = 0;
for (int i = 0; i < N; i++)
{
if (arr[i].first > r)
{
result += r - l;
l = arr[i].first;
r = arr[i].second;
}
else
{
r = max(r, arr[i].second);
}
}
result += r - l;
cout << result << endl;
}
반응형
'Algorithm' 카테고리의 다른 글
[1차원 배열 단계] 백준 10818번 최소,최대 (0) | 2020.10.19 |
---|---|
[스위핑 단계] 백준 2836번 수상 택시 (0) | 2020.10.19 |
백준 1083번 소트 (0) | 2020.10.18 |
프로그래머스 lv3 정수 삼각형 (java) (0) | 2020.10.16 |
[세그먼트 트리 단계] 백준 1517번 버블 소트 (0) | 2020.10.16 |