문제
백준 1781
설명
데드라인이 있어서 가장 보상이 좋은 문제만 고를 수가 없다. 하지만 조금만 생각을 바꾸면 간단한 그리디 정책을 떠올릴 수 있다. 바로 모든 시간대에서 최대한 꿀문제만 고르는 것이다. 증명은 간단하므로 생략한다.
이를 좀더 구체화한 전략은 다음과 같다. i
시간 이하의 문제를 그룹에 넣고, 보상에 대해 정렬했을 때 인덱스가 i
보다 큰 경우를 모두 배제한다. 시간을 i+1
로 올리고 이를 반복한다.
- 이때 우선순위 큐를 사용하면 정렬된 상태를 유지하고 크기를 일정하게 유지하는 것을 간단하게 구현할 수 있다.
- 또한 굳이 시간을
1
단위로 세지않고 데드라인 단위로 해도 된다. 데드라인이 짧은 시간부터 큐에 넣어 가장 최근에 넣은 데드라인과 큐의 크기를 비교하면 된다.
시간 복잡도
O(\(\mathrm{N}\log{\mathrm{N}}\))
코드
댓글남기기