본문 바로가기

알고리즘/백준

13334. 철로

h,o의 범위가 매우 크기 때문에 완전 탐색은 배제한다. 이 문제는 heap 자료구조를 사용한다. 입력을 받을 때 주의할 점은 정렬되어서 입력을 주지 않아서 sorted로 정렬 시켜줘야한다.

 

그 후에, 끝 위치 기준으로 정렬을 해준다. -> 끝 위치에서 d만큼 앞으로 가서 포함되는것 체크 할 것이므로 가장 가까운 끝 부터 찾는다.

정렬된 구간에서 d만큼 거슬러 올라간 부분을 lim으로 두고, lim보다 start가 이상이면 힙에 넣어준다. 즉 포함되는 구간이다. 그리고 마지막 조건으로 힙이 존재하고 힙의 첫번째 원소가 lim보다 작다면 구간에 포함되지 않으므로 모두 빼준다.

 

힙을 생각하는 과정이 어려운 문제 같다. 하지만 비슷한 느낌의 문제를 풀어본적이 있어서 생각해 낼 수 있었다.

 

import sys,heapq
input = sys.stdin.readline
n = int(input())
gugan = [sorted(list(map(int, input().split()))) for _ in range(n)]
d = int(input())

gugan.sort(key= lambda x: x[1])
# print(gugan)

ans = -1 
heap =[]
for s,e in gugan:
  lim = e - d
  if s >= lim:
    heapq.heappush(heap, s)
  while heap and heap[0] < lim:
    heapq.heappop(heap)
  ans = max(ans, len(heap))
print(ans)

'알고리즘 > 백준' 카테고리의 다른 글

1268. 임시 반장 정하기  (0) 2022.06.30
12865. 평범한 배낭 (with 시온)  (0) 2022.06.17
1195. 킥다운  (0) 2022.06.09
16968. 배열 복원하기  (0) 2022.06.04
15591. Mootube  (0) 2022.05.01