https://www.acmicpc.net/problem/15922
15922번: 아우으 우아으이야!!
N개의 선분을 모두 그렸을 때, 수직선 위에 그어진 선분 길이의 총합을 출력한다아아어으잉에애야우아으아이아야아아아아아아이야!!!
www.acmicpc.net
접근 방법
선분의 시작점과 끝점이 정렬된 상태로 주어지니, 이전 선분에 대해 현재 선분이 그 안에 있는지, 걸쳐 있는지, 나와있는 지 판별해서 조건을 걸었다가 실패.
스위핑 알고리즘 - 이전 끝점이 시작점 보다 작으면 갱신, 아니면 이전끝점, 현재 끝점 비교 해서 큰값을 비교
문제 풀이
- 이미 주어진 입력이 정렬 되있으므로 0번 인덱스의 시작과 끝점을 start와 end에 넣어줌
- 1번 인덱스 부터 반복문을 돌며 이전값의 끝점이 현재의 시작점 보다 작으면 이어지지 않고 끊어져 있다는 소리니 start와 end 갱신
- 아니면 안에 있거나 겹쳐있다는 소리니 끝값을 비교해서 넣어주기
- 반복문 탈출 후 계산이 안된 시작점과 끝점이 있으니 계산 후, 출력
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Baekjoon.Gold
{
class _15922
{
static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine());
int[][] arr = new int[n][];
for (int i = 0; i < n; i++)
arr[i] = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
int start = arr[0][0];
int end = arr[0][1];
long sum = 0;
//스위핑 알고리즘
for (int i = 1; i < n; i++)
{
if (end < arr[i][0])
{
sum += end - start;
end = arr[i][1];
start = arr[i][0];
}
else
end = Math.Max(end, arr[i][1]);
}
sum += end - start;
Console.WriteLine(sum);
}
}
}
'문제 풀이 > C#' 카테고리의 다른 글
[2110] - 공유기 설치 (0) | 2022.11.06 |
---|---|
[1644] - 소수의 연속합 (0) | 2022.11.04 |
[18111] - 마인크래프트 (0) | 2022.11.04 |
[9251] - LCS (0) | 2022.11.02 |
[1918] - 후위 표기식 (0) | 2022.11.01 |