https://www.acmicpc.net/problem/1781
1781번: 컵라면
상욱 조교는 동호에게 N개의 문제를 주고서, 각각의 문제를 풀었을 때 컵라면을 몇 개 줄 것인지 제시 하였다. 하지만 동호의 찌를듯한 자신감에 소심한 상욱 조교는 각각의 문제에 대해 데드라�
www.acmicpc.net
문제 설명
문제가 N개 주어지며, 각각의 문제마다 데드라인과 받을 수 있는 컵라면 수가 있습니다.
문제를 데드라인 안에 해결하면 컵라면을 받을 수 있습니다.
모든 문제의 데드라인은 N 이하이며, 푸는데는 1만큼의 시간이 필요합니다.
이때 받을 수 있는 컵라면의 최대 수를 구하는 문제입니다.
풀이
데드라인을 이미 넘긴 문제는 풀 필요가 없으므로, 풀어야 할 문제를 골라야 합니다.
데드라인 순서대로 문제를 탐색하며 이전 단계에서 풀기로 한 문제 수가 현재 문제의 데드라인보다 크다면 현재 문제를 풀기로 합니다. 만약 풀기로 한 문제 수와 현재 문제의 데드라인이 같다면 풀기로 한 문제들 중 가장 적은 컵라면을 받는 문제와 현재 문제를 비교합니다. 현재 문제의 컵라면 수가 더 많다면 비교한 문제 대신 현재 문제를 풀기로 합니다. 모든 문제들에 대해 이러한 과정을 반복하면 답을 구할 수 있습니다.
풀기로 한 문제들의 컵라면 수를 최소 힙에 넣어두면 '풀기로 한 문제들 중 가장 적은 컵라면을 받는 문제'를 빠르게 찾을 수 있습니다. push연산과 pop연산이 최대 N번씩 실행되므로 $O(NlogN)$의 시간복잡도로 풀 수 있습니다.
설명이 다소 장황한 것 같은데 코드를 보면 이해할 수 있을 거라고 생각합니다.
코드
hw 자료형을 통해 과제를 나타냈습니다.
사족
골드1치고는 쉬운 것 같아요
처음으로 bits/stdc++.h 써봤는데 너무 편해요
'문제풀이 > 백준' 카테고리의 다른 글
백준 13306번 트리 (0) | 2020.11.08 |
---|---|
백준 20052번 괄호 문자열? (0) | 2020.10.31 |
백준 17298번 오큰수 (0) | 2020.10.18 |
백준 2436번 공약수 (0) | 2020.10.17 |
백준 2981번 검문 (0) | 2020.09.08 |