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
문제 해결
- n과 x, y의 범위가 매우 크기 때문에 리스트를 만들어서 0,1로 색칠하기를 할 수는 없다.
- 그러면 주어진 범위를 가지고 한번에 길이 범위를 수정해야 한다.
- 결국 리스트 안에 범위를 다 넣고 lowerbound를 오름차순 한 다음 다음 범위와 연결 되는지 안되는지 확인하면 끝
- 단 python3로는 시간초과가 뜨고 pypy3로 성공했다. (n이 지나치게 크고 sort를 한번 해서 제법 큰거 같다.)
CODE
n = int(input())
Data = []
for _ in range(n):
Data.append(tuple(map(int, input().split())))
Data.sort()
left = Data[0][0]
right = Data[0][1]
ans = 0
for i in range(1,n):
if right >= Data[i][1]: continue
elif right < Data[i][0]:
ans += right - left
left = Data[i][0]
right = Data[i][1]
elif Data[i][0] <= right <= Data[i][1]:
right = Data[i][1]
ans += right- left
print(ans)
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 7570 줄 세우기 (0) | 2023.04.08 |
---|---|
[python] 백준 2457 공주님의 정원 (0) | 2023.04.08 |
[python] 백준 2668 숫자고르기 (0) | 2023.04.07 |
[python] 백준 2885 초콜릿 식사 (0) | 2023.04.07 |
[python] 백준 20437 문자열 게임 2 (0) | 2023.04.07 |
댓글