아우으 우아으이야!!

난이도

Gold 5

인증

문제

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

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

선분을 겹치게 그리는 것도 가능하다아어으우어우으아아아아아아아아아이야!!!!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개의 선분을 모두 그렸을 때, 수직선 위에 그어진 선분 길이의 총합을 출력한다아아어으잉에애야우아으아이아야아아아아아아이야!!!

예제 입력

5
-5 -2
-3 0
2 5
6 10
8 12

예제 출력

14

해설 및 후기

문제의 가독성이 조금 떨어지는 느낌이었다. 각 선분에 대해 Case를 크게 세 개로 나누어 값을 구했다. 각 선분이 끝점만 붙어있거나 떨어진 경우, 각 선분이 겹치는 경우, 한 선분이 포함된 경우로 나누어 값을 더했다.

제출 코드

import sys
n = int(sys.stdin.readline().rstrip())
bef = [None, None]
sz = 0
for i in range(n):
    x, y = map(int, sys.stdin.readline().rstrip().split())
    if(bef[0] == None):
        sz += y-x
        bef = [x,y]
    else:
        if(bef[1] <= x):
            sz += y-x
            bef = [x,y]
        elif(bef[1] >= y):
            continue
        else:
            sz += y-bef[1]
            bef = [x,y]
print(sz)