본문 바로가기
알고리즘

[백준] 2170번: 선 긋기 - python

by 육빔 2024. 4. 2.
728x90
반응형

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

 

처음 작성한 아이디어 : 

 

시작 기준으로 정렬 후 low, high 값을 저장하면서 차이를 계산해나가는 방식.

 

75퍼에서 틀림 발생

n = int(input())
arr = []
for i in range(n):
    a, b = map(int, input().split())
    arr.append([a,b])

arr.sort() #시작 기준 정렬

cnt = arr[0][1]-arr[0][0]
low = arr[0][0]
high = arr[0][1]
for i in range(1, n):
    if arr[i][0] > low and arr[i][1] > high and high > arr[i][0]:
        cnt += arr[i][1] - high
        high = arr[i][1]
        low = arr[i][0]
    elif arr[i][0] > high and arr[i][1] > high:
        cnt += arr[i][1] - arr[i][0]
        high = arr[i][1]
        low = arr[i][0]


print(cnt)

 

같을때 설정 안했었다. ^^;;

import sys
input = sys.stdin.readline
n = int(input())
arr = []
for i in range(n):
    a, b = map(int, input().split())
    arr.append([a,b])

arr.sort(key=lambda x : (x[0],x[1])) #시작 기준 정렬
cnt = arr[0][1]-arr[0][0]
low = arr[0][0]
high = arr[0][1]
for i in range(1, n):
    if arr[i][0] >= low and arr[i][1] >= high and high > arr[i][0]:
        cnt += arr[i][1] - high
        high = arr[i][1]
        low = arr[i][0]
    elif arr[i][0] >= high and arr[i][1] >= high:
        cnt += arr[i][1] - arr[i][0]
        high = arr[i][1]
        low = arr[i][0]

print(cnt)

 

수정 후 정답

728x90
반응형