본문 바로가기

문제풀이/백준

백준 1781번 컵라면

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