반갑습니다!

[프로그래머스] 라면공장 본문

알고리즘 문제 풀이

[프로그래머스] 라면공장

김덜덜이 2020. 4. 10. 15:17
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr

풀이

Priority_Queue를 사용해서 밀가루가 0이 될 때마다 가장 많은 양을 보충해주면 된다.

코드

C++

#include <string>
#include <vector>
#include <queue>
using namespace std;

int solution(int stock, vector<int> dates, vector<int> supplies, int k) {
    int answer = 0;
    int day = 0;
    int idx = 0;
    priority_queue<int> pq;
    while (day < k) {
        // 공급받을 수 있는 날이 되면 pq에 저장
        if (idx < dates.size() && day == dates[idx]) {
            pq.push(supplies[idx]);
            idx++;
        }
        // 남은 밀가루가 없으면 가장 많은 양 공급받음
        if (stock == 0) {
            stock += pq.top();
            pq.pop();
            answer++;
        }
        stock--;
        day++;
    }
    return answer;
}

Java

import java.util.Collections;
import java.util.PriorityQueue;

class Solution {
    public int solution(int stock, int[] dates, int[] supplies, int k) {
        int answer = 0;
        int day = 0;
        int idx = 0;
        PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
        while(day < k){
            if(idx < dates.length && day == dates[idx]){
                pq.add(supplies[idx]);
                idx++;
            }
            if(stock == 0){
                stock += pq.poll();
                answer++;
            }
            stock--;
            day++;
        }
        return answer;
    }
}

'알고리즘 문제 풀이' 카테고리의 다른 글

[프로그래머스] 자물쇠와 열쇠  (0) 2020.04.12
[백준] 2638 치즈  (0) 2020.04.11
[프로그래머스] 등굣길  (0) 2020.04.09
[프로그래머스] 정수 삼각형  (0) 2020.04.09
[프로그래머스] 땅따먹기  (0) 2020.04.09