[ BOJ / Python ] 2170번 선 긋기

황승환·2022년 9월 1일
0

Python

목록 보기
473/498

이번 문제는 이전 자의 두 점을 기억하여 현재 자의 두 점과 비교하는 방식으로 해결하였다. 우선 자에 대한 데이터를 왼쪽 점과 오른쪽 점의 오름차순으로 정렬해주고, for문을 통해 해당 데이터들을 순회하며 이전 왼쪽 점이 현재 왼쪽 점보다 크거나 이전 오른쪽 점이 현재 오른쪽 점보다 작을 경우 정답 변수에 오른쪽 점과 왼쪽 점의 차를 더해주고, 만약 이전 오른쪽 점이 현재 왼쪽 점보다 클 경우 정답 변수에서 이전 오른쪽 점과 현재 왼쪽 점의 차를 빼주는 방식으로 해결하였다.

Code

import sys
input = sys.stdin.readline
n = int(input())
lines = []
for _ in range(n):
    a, b = map(int, input().split())
    lines.append((a, b))
lines.sort(key=lambda x:(x[0], x[1]))
answer = 0
bl, br = 0, 0
for l, r in lines:
    if not answer:
        answer = r-l
        bl, br = l, r
    elif bl <= l and br >= r:
        continue
    answer += r-l
    if br > l:
        answer -= br-l
    bl, br = l, r
print(answer)

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글