문제
https://www.acmicpc.net/problem/13334
풀이


그림 순서:
1 3 5
2 4
현재 철로 범위 내에 가장 많은 (시작점, 끝점) 범위가 포함되려면 끝점을 기준으로 검사해야 한다.
코드
import sys, heapq
n = int(sys.stdin.readline())
office = []
for _ in range(n):
start, end = map(int, input().split())
if start>end:
start, end = end, start
heapq.heappush(office, (end, start)) # (우선순위, 값) -> 종료 시간 기준으로 최소힙 정렬
d = int(sys.stdin.readline()) # 고려할 구간의 길이
possible = [] # 현재 철로 내에 있는 사람들 저장하는 최소힙
result = 0 # 포함되는 사람의 최대 수
cnt = 0 # 현재 possible에 들어있는 회의 개수
while office:
end1, start1 = heapq.heappop(office) # 끝지점이 가장 빠른 사람 꺼내기
if start1>=end1-d: # 철로 안에 포함된다면
heapq.heappush(possible, (start1, end1)) # possible 최소힙에 넣기
cnt+=1
while possible:
start2, end2 = heapq.heappop(possible) # 하나 꺼내서 철로에서 벗어나는지 확인
if start2<end1-d: # 철로에서 벗어난다면
cnt -= 1
else:
heapq.heappush(possible, (start2, end2)) # 아니라면 다시 힙에 넣기
break
result = max(result, cnt) # 최댓값을 저장
print(result)'정글 > 알고리즘' 카테고리의 다른 글
| [파이썬] PriorityQueue, heapq (0) | 2025.03.27 |
|---|---|
| [정글/시험] 2주차 시험 회고 (0) | 2025.03.27 |
| [백준/Python] 10000번 : 원 영역 (0) | 2025.03.26 |
| [백준/Python] 2812번 : 크게 만들기 (0) | 2025.03.24 |
| [백준/Python] 2470번 : 두 용액 (0) | 2025.03.23 |