본문 바로가기
Problem Solving/BOJ

[Sweeping] 2170 선긋기

by Bokoo14 2023. 1. 4.

https://www.acmicpc.net/problem/2170

 

2170번: 선 긋기

첫째 줄에 선을 그은 횟수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 다음 N개의 줄에는 선을 그을 때 선택한 두 점의 위치 x, y(-1,000,000,000 ≤ x < y ≤ 1,000,000,000)가 주어진다.

www.acmicpc.net

# 2023.01.04
import sys
input = sys.stdin.readline

n = int(input())
xy = [list(map(int, input().split())) for _ in range(n)]
xy.sort(key = lambda x: (x[0], x[1])) # x좌표, y좌표 오름차순 정렬

answer=[[xy[0][0], xy[0][1]]]
index=0
for xx, yy in xy:
    if answer[index][1]>xx: # 현재 선이 이미 그은 선에 겹치면
        answer[index][1]=max(answer[index][1], yy) # 선을 연장시켜줌
    else: # 이미 그은 선과 겹치지 않으면 - 새로운 선분을 그을때
        answer.append([xx, yy])
        index+=1
 
total=0
for x, y in answer:
    total+=(y-x)
print(total)

answer이라는 리스트에 선분을 저장 -> 이어지는 선분을 각각 저장해줌

 

현재의 선분이 원래 있는 선분에 겹치면? 선분을 연장해줌

이미 있는 선분과 겹치지 않으면? 새로운 선분을 answer에 append해줌

 

출력: 선분들의 길이를 계산해서 total 길이를 출력

 

'Problem Solving > BOJ' 카테고리의 다른 글

[Binary Search] 2805 나무 자르기  (0) 2023.01.06
[BruteForce] 15686 치킨 배달  (0) 2023.01.05
[DP] 12865 평범한 배낭  (0) 2023.01.04
[Greedy] 1931 회의실 배정  (0) 2023.01.04
[DP] 1912 연속합  (0) 2023.01.04