[c++] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค :: ๋ผ๋ฉด๊ณต์žฅ (๋ฌธ์ œ ํ’€์ด, ์ฝ”๋“œ)

๋ผ๋ฉด๊ณต์žฅ

https://programmers.co.kr/learn/courses/30/lessons/42629#

 

์ฝ”๋“œ

#include <string>
#include <vector>
#include <iostream>

using namespace std;

vector<pair<int, int>> node;

int solution(int stock, vector<int> dates, vector<int> supplies, int k) {
    int answer = 0;

    int day = stock;

    int size = dates.size();
    for (int i = 0; i < size; i++) {
        node.push_back(make_pair(dates[i], supplies[i]));
    }

    while (day < k) {
        int idx = 0;
        int max_idx = 0;
        while (idx < node.size() && node[idx].first <= day) {
            if (node[idx].second > node[max_idx].second) {
                max_idx = idx;
            }
            idx++;
        }
        day += node[max_idx].second;
        answer++;
        node.erase(node.begin() + max_idx);
    }

    return answer;
}

int main() {
    int stock = 7;
    vector<int> dates = { 3, 10, 12, 19 };
    vector<int> supplies = {3, 9, 12, 11 };
    int k = 30;
    cout << solution(stock, dates, supplies, k); //3
}

 

์„ค๋ช…

 ์ž๋ฃŒ๊ตฌ์กฐ ํž™ ๋ฌธ์ œ์— ์†ํ•ด์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ด๋ฏธ dates๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด์žˆ๋‹ค๊ณ  ๋ฌธ์ œ์— ๊ธฐ์žฌ๋˜์–ด์žˆ์œผ๋ฏ€๋กœ, ์ฐจ๋ก€๋กœ vector์— ๋„ฃ์–ด์ฃผ๋ฉด ๋ถ€๋ถ„ ์ •๋ ฌ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ „์ฒด ์ •๋ ฌ์ด ๋˜์–ด์žˆ๋Š” ํž™ ๊ตฌ์กฐ๋ฅผ vector๋กœ ๋‚˜ํƒ€๋‚ธ ์…ˆ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ํ•ด๋‹น vector๋Š” dates์— ๋Œ€ํ•œ ์ตœ์†Œ ํž™์ด ๋œ๋‹ค.

 ์‚ฌ์‹ค ์—ฌ๊ธฐ์„œ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๋”ฐ๋ผ ๋‚ด๋ ค๊ฐ€๋ฉด์„œ ๋น„๊ต๋ฅผ ํ–ˆ์œผ๋ฉด ํž™์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค๊ณ  ์šฐ๊ธธ์ˆ˜๋ผ๋„ ์žˆ๊ฒ ์ง€๋งŒ... index๋ฅผ ํ•˜๋‚˜์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด์„œ ์‚ฌ์šฉํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— ํž™์„ ์‚ฌ์šฉํ–ˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜๊ฐ€ ์—†๋‹ค. ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ๋˜์–ด์žˆ๋Š” ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•œ ๊ฒƒ ๋ฟ์ด๋‹ค.

 

 

 ์–ด์จŒ๋“  ๋ฌธ์ œ ํ’€์ด๋ฅผ ํ•ด๋ณด๋ฉด, ์šฐ์„  ์ฒ˜์Œ ์ฃผ์–ด์ง„ stock๋ฅผ day์— ์ €์žฅํ•œ๋‹ค. node์—๋Š” dates ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ (dates, supplies)๊ฐ€ ์ €์žฅ๋˜์–ด์žˆ๋‹ค.

int day = stock;

int size = dates.size();
for (int i = 0; i < size; i++) {
    node.push_back(make_pair(dates[i], supplies[i]));
}

 

 

dates๊ฐ€ day๋ฅผ ๋„˜์ง€ ์•Š์œผ๋ฉด์„œ supply๊ฐ€ ๊ฐ€์žฅ ํฐ ๋‚ ์งœ๋ฅผ ์ฐพ๋Š”๋‹ค. ์ฐพ์•˜์œผ๋ฉด ํ˜„์žฌ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐ€๊ฐ€๋ฃจ๊ฐ€ ์†Œ์ง„๋˜๋Š” ๋‚ ์งœ์ธ day์— supply๋ฅผ ๋”ํ•ด์ฃผ๊ณ , ํ•ด๋‹น dates๋ฅผ node vector์—์„œ ์‚ญ์ œํ•œ๋‹ค. ์ด ๋•Œ๋งˆ๋‹ค answer์— 1์”ฉ ๋”ํ•ด์ค€๋‹ค.

while (idx < node.size() && node[idx].first <= day) {
            if (node[idx].second > node[max_idx].second) {
                max_idx = idx;
            }
            idx++;
}
day += node[max_idx].second;
answer++;
node.erase(node.begin() + max_idx);

์ด๋Ÿฐ์‹์œผ๋กœ ๋ฐ˜๋ณตํ•˜๋‹ค๋ณด๋ฉด ์ฃผ์–ด์ง„ k๋ณด๋‹ค day๊ฐ€ ๋” ์ปค์ง€๋Š” ์ˆœ๊ฐ„์ด ์˜ค๋Š”๋ฐ, ๊ทธ ๋•Œ์˜ answer๊ฐ€ ๋ฌธ์ œ์˜ ์ •๋‹ต์ด๋‹ค.

while (day < k) {
 //...
}

return answer;

 

์ฑ„์  ๊ฒฐ๊ณผ

 

๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด

 ํž™ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์šฐ์„ ์ˆœ์œ„ํ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฑธ ๊ฐœ๋…์ •๋ฆฌ์—์„œ ํ–ˆ์ง€๋งŒ ์ƒ๊ฐํ•ด๋‚ด์ง€ ๋ชปํ–ˆ๋‹ค. STL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์šฐ์„ ์ˆœ์œ„ํ๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ๋“ค์ด ๋งŽ๋‹ค.

 ํ•˜๋ฃจ๊ฐ€ ์ง€๋‚  ๋•Œ๋งˆ๋‹ค stock์ด ๊ฐ์†Œํ•˜๋Š” ๊ฑธ ๋ณด์ด๊ธฐ ์œ„ํ•ด for๋ฌธ์œผ๋กœ k๋งŒํผ์„ ๋ฐ˜๋ณตํ•˜์˜€๋‹ค. dates์— ํ•ด๋‹นํ•˜๋Š” ๋‚ ์ด ์˜ค๋ฉด supply๋ฅผ ์šฐ์„ ์ˆœ์œ„ํ์— ์ €์žฅํ•ด๋‘” ํ›„, stock์ด 0์ด ๋  ๋•Œ ๋ถˆ๋Ÿฌ์™€์„œ stock์— ๋”ํ•ด์ค€๋‹ค. ์šฐ์„ ์ˆœ์œ„ํ์— ์ €์žฅํ•ด๋‘” ๋•๋ถ„์— supply๊ฐ€ ํฐ ์ˆœ์„œ๋Œ€๋กœ ๋น ์ ธ๋‚˜์˜ค๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜์‘ํ˜•