일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- 알고리즘
- 병행성
- 렌더링 파이프라인
- 병행성 관련 오류
- 동적계획법
- OS
- 자료구조
- 프로그래머스
- directx
- 컨디션 변수
- 파일시스템 구현
- 영속성
- DirectX12
- 멀티프로세서
- codility
- 백준
- Direct12
- 운영체제
- 그리디알고리즘
- DirectX 12
- 스케줄링
- I/O장치
- 디자인패턴
- 멀티쓰레드
- 다이나믹 프로그래밍
- 타입 객체
- 락
- 쓰레드
- 다이나믹프로그래밍
- 그리디 알고리즘
Archives
- Today
- Total
기록공간
라면공장 (프로그래머스) 본문
반응형
공급 받는 횟수가 최소가 되는 방법은 수량이 많은 순으로 공급 받으면 된다.
공급 받을 날짜가 되면 그 날짜의 밀가루 수량을 힙에 추가한다. (여기서 힙은 최대힙)
그리고 밀가루가 다 떨어 졌을때 힙에서 최대 수량의 밀가루를 꺼내어 공급받은 후 그 횟수를 올려주면 된다.
이 과정을 0번째 날 부터 k-1번째 날까지 반복한다면 밀가루 수량을 k날까지 맞출 수 있게된다.
C++에서는 힙의 원리가 적용된 'STL priority_queue'를 제공하므로 이것을 사용하면 간편하게 문제해결을 할 수 있다.
코드는 다음과 같다.
#include <vector>
#include <queue>
using namespace std;
int solution(int stock, vector<int> dates, vector<int> supplies, int k) {
int answer = 0;
// 힙 선언. 최대 힙으로 설정을 바꾼다.
priority_queue<int, vector<int>, less<int>> q;
int index = 0;
// k-1번째 날까지 반복한다. (k번째 날에는 다시 밀가루를 공급받으므로)
for(int i = 0; i < k; ++i)
{
// 공급 받을 날짜가 되었으므로
// 힙에 그 날짜의 공급 가능한 밀가루 수량을 집어넣는다.
if(dates[index] == i)
{
q.push(supplies[index]);
++index;
}
// 밀가루가 비었다면 공급받는다.
if(stock == 0)
{
// 가장 수량이 많은 순으로
stock += q.top();
q.pop();
++answer;
}
--stock;
}
return answer;
}
반응형
'Algorithm > 문제' 카테고리의 다른 글
여행경로 (프로그래머스) (0) | 2020.05.23 |
---|---|
디스크 컨트롤러 (프로그래머스) (0) | 2020.05.20 |
타일 장식물 (프로그래머스) (0) | 2020.05.19 |
비밀지도 (프로그래머스) (0) | 2020.05.16 |
크레인 인형뽑기 게임 (프로그래머스) (0) | 2020.05.16 |
Comments