[백준 - 15922][GOLD 5][해설 X] - 아우으 우아으이야!! (JAVA)

728x90

 

문제


아우으 우아으이야!! 으어아아아아아아아ㅏㅏㅏ아아앙ㅇ아아ㅏ

수직선 위에 선분을 여러 개 그릴 거 야아아앙ㅇ아아아ㅏㅏ아아ㅏㅏ!!

선분을 겹치게 그리는 것도 가능하다아어으우어우으아아아아아아아아아이야!!!!1

선분을 모두 그렸을 때, 수직선 위에 그려진 선분 길이의 총합은 얼마아아으으우어으이으야이야!!!!

 

입력


첫째 줄에 수직선 위에 그릴 선분의 개수 N이 주어진다아우으 우아으이야!!. (1 ≤ N ≤ 100,000)

둘째 줄 부터 N개의 줄에 좌표를 나타내는 정수쌍 (x, y)가 주어진다으어아아아아아아아ㅏㅏㅏ아아앙ㅇ아아.

이는 [x, y] 구간 (x와 y를 포함하는 구간)에 선분을 그린다는 의미이다유아아우응아이양. 

좌표는 x가 증가하는 순으로, x가 같다면 y가 증가하는 순으로 주어진다으우오아앙아ㅓㅇ아ㅡㅇ. (-1,000,000,000 ≤ x < y ≤ 1,000,000,000)

 

출력


N개의 선분을 모두 그렸을 때, 수직선 위에 그어진 선분 길이의 총합을 출력한다아아어으잉에애야우아으아이아야아아아아아아이야!!!

 

해결 코드


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());

        StringTokenizer st = new StringTokenizer(br.readLine());
		
        //최소 시작점
        int start = Integer.parseInt(st.nextToken());
        //최소 끝점
        int end = Integer.parseInt(st.nextToken());
        //수직선 합
        int sum = 0;
		
        //모든 점의 수직선 확인
        for(int i=0;i<N-1;i++){
            st = new StringTokenizer(br.readLine());
            int x = Integer.parseInt(st.nextToken());
            int y = Integer.parseInt(st.nextToken());
			
            //이전 수직선보다 뒤에 있는 수직선인 경우 수직선 교체
            if(x > end){
                sum += end - start;
                start = x;
                end = y;
            }
            //이전 수직선의 끝점보다 뒤에 있는 끝점인 경우 수직선 연장
            if(end < y){
                end = y;
            }
        }
		
        //남은 수직선 추가
        sum += end - start;

        System.out.println(sum);
    }
}
 

 

실행 결과


 


  • 시작점과 끝점이 언제 바뀌는지 생각해보자