아우으 우아으이야!!
난이도
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)