알고리즘
[백준] 2170번: 선 긋기 - python
육빔
2024. 4. 2. 14:22
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