Algorithm/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / C++] ๋ผ๋ฉด๊ณต์žฅ ํ’€์ด

meeeeejin 2020. 7. 24. 19:10

๋ฌธ์ œ ์„ค๋ช…

 

๋ผ๋ฉด ๊ณต์žฅ์—์„œ๋Š” ํ•˜๋ฃจ์— ๋ฐ€๊ฐ€๋ฃจ๋ฅผ 1ํ†ค์”ฉ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์›๋ž˜ ๋ฐ€๊ฐ€๋ฃจ๋ฅผ ๊ณต๊ธ‰๋ฐ›๋˜ ๊ณต์žฅ์˜ ๊ณ ์žฅ์œผ๋กœ ์•ž์œผ๋กœ k์ผ ์ดํ›„์—์•ผ ๋ฐ€๊ฐ€๋ฃจ๋ฅผ ๊ณต๊ธ‰๋ฐ›์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด์™ธ ๊ณต์žฅ์—์„œ ๋ฐ€๊ฐ€๋ฃจ๋ฅผ ์ˆ˜์ž…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

ํ•ด์™ธ ๊ณต์žฅ์—์„œ๋Š” ํ–ฅํ›„ ๋ฐ€๊ฐ€๋ฃจ๋ฅผ ๊ณต๊ธ‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ ์งœ์™€ ์ˆ˜๋Ÿ‰์„ ์•Œ๋ ค์ฃผ์—ˆ๊ณ , ๋ผ๋ฉด ๊ณต์žฅ์—์„œ๋Š” ์šด์†ก๋น„๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ์ตœ์†Œํ•œ์˜ ํšŸ์ˆ˜๋กœ ๋ฐ€๊ฐ€๋ฃจ๋ฅผ ๊ณต๊ธ‰๋ฐ›๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

 

ํ˜„์žฌ ๊ณต์žฅ์— ๋‚จ์•„์žˆ๋Š” ๋ฐ€๊ฐ€๋ฃจ ์ˆ˜๋Ÿ‰ stock, ๋ฐ€๊ฐ€๋ฃจ ๊ณต๊ธ‰ ์ผ์ •(dates)๊ณผ ํ•ด๋‹น ์‹œ์ ์— ๊ณต๊ธ‰ ๊ฐ€๋Šฅํ•œ ๋ฐ€๊ฐ€๋ฃจ ์ˆ˜๋Ÿ‰(supplies), ์›๋ž˜ ๊ณต์žฅ์œผ๋กœ๋ถ€ํ„ฐ ๊ณต๊ธ‰๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์‹œ์  k๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๋ฐ€๊ฐ€๋ฃจ๊ฐ€ ๋–จ์–ด์ง€์ง€ ์•Š๊ณ  ๊ณต์žฅ์„ ์šด์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ตœ์†Œํ•œ ๋ช‡ ๋ฒˆ ํ•ด์™ธ ๊ณต์žฅ์œผ๋กœ๋ถ€ํ„ฐ ๋ฐ€๊ฐ€๋ฃจ๋ฅผ ๊ณต๊ธ‰๋ฐ›์•„์•ผ ํ•˜๋Š”์ง€๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

 

dates[i]์—๋Š” i๋ฒˆ์งธ ๊ณต๊ธ‰ ๊ฐ€๋Šฅ์ผ์ด ๋“ค์–ด์žˆ์œผ๋ฉฐ, supplies[i]์—๋Š” dates[i] ๋‚ ์งœ์— ๊ณต๊ธ‰ ๊ฐ€๋Šฅํ•œ ๋ฐ€๊ฐ€๋ฃจ ์ˆ˜๋Ÿ‰์ด ๋“ค์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

<์ œํ•œ์‚ฌํ•ญ>

  • stock์— ์žˆ๋Š” ๋ฐ€๊ฐ€๋ฃจ๋Š” ์˜ค๋Š˜(0์ผ ์ดํ›„)๋ถ€ํ„ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • stock๊ณผ k๋Š” 2 ์ด์ƒ 100,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • dates์˜ ๊ฐ ์›์†Œ๋Š” 1 ์ด์ƒ k ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • supplies์˜ ๊ฐ ์›์†Œ๋Š” 1 ์ด์ƒ 1,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • dates์™€ supplies์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 20,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • k์ผ ์งธ์—๋Š” ๋ฐ€๊ฐ€๋ฃจ๊ฐ€ ์ถฉ๋ถ„ํžˆ ๊ณต๊ธ‰๋˜๊ธฐ ๋•Œ๋ฌธ์— k-1์ผ์— ์‚ฌ์šฉํ•  ์ˆ˜๋Ÿ‰๊นŒ์ง€๋งŒ ํ™•๋ณดํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • dates์— ๋“ค์–ด์žˆ๋Š” ๋‚ ์งœ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • dates์— ๋“ค์–ด์žˆ๋Š” ๋‚ ์งœ์— ๊ณต๊ธ‰๋˜๋Š” ๋ฐ€๊ฐ€๋ฃจ๋Š” ์ž‘์—… ์‹œ์ž‘ ์ „ ์ƒˆ๋ฒฝ์— ๊ณต๊ธ‰๋˜๋Š” ๊ฒƒ์„ ๊ธฐ์ค€์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 9์ผ์งธ์— ๋ฐ€๊ฐ€๋ฃจ๊ฐ€ ๋ฐ”๋‹ฅ๋‚˜๋”๋ผ๋„, 10์ผ์งธ์— ๊ณต๊ธ‰๋ฐ›์œผ๋ฉด 10์ผ์งธ์—๋Š” ๊ณต์žฅ์„ ์šด์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ€๊ฐ€๋ฃจ๊ฐ€ ๋ฐ”๋‹ฅ๋‚˜๋Š” ๊ฒฝ์šฐ๋Š” ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

๋ฌธ์ œ ์ฃผ์†Œ: https://programmers.co.kr/learn/courses/30/lessons/42629

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๋ผ๋ฉด๊ณต์žฅ

๋ผ๋ฉด ๊ณต์žฅ์—์„œ๋Š” ํ•˜๋ฃจ์— ๋ฐ€๊ฐ€๋ฃจ๋ฅผ 1ํ†ค์”ฉ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์›๋ž˜ ๋ฐ€๊ฐ€๋ฃจ๋ฅผ ๊ณต๊ธ‰๋ฐ›๋˜ ๊ณต์žฅ์˜ ๊ณ ์žฅ์œผ๋กœ ์•ž์œผ๋กœ k์ผ ์ดํ›„์—์•ผ ๋ฐ€๊ฐ€๋ฃจ๋ฅผ ๊ณต๊ธ‰๋ฐ›์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด์™ธ ๊ณต์žฅ์—์„œ ๋ฐ€๊ฐ€๋ฃจ๋ฅผ ์ˆ˜์ž…ํ•ด์•ผ ํ•ฉ๋‹ˆ๏ฟฝ๏ฟฝ

programmers.co.kr

 

 

 

 

๋ฌธ์ œ ํ’€์ด

 

stock์ด 0์ด๋˜๋Š” ์‹œ์ ์ด x์ผ ํ›„๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋ฉด, x์ผ ์ด์ „์—๋Š” ๋ฐ€๊ฐ€๋ฃจ๋ฅผ ๊ณต๊ธ‰๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ dates ๋ฐฐ์—ด ๋‚ด์˜ x์ผ๋ณด๋‹ค ์ž‘์€ ๊ณต๊ธ‰์ผ ์ค‘์—์„œ ๊ฐ€์žฅ ๊ณต๊ธ‰๋Ÿ‰์ด ํฐ ๋‚ ์— ๊ณต๊ธ‰์„ ๋ฐ›์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

 

์ฝ”๋“œ์—์„  ์ตœ๋Œ€ ๊ณต๊ธ‰๋Ÿ‰์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์ตœ๋Œ€ ํž™ ์šฐ์„ ์ˆœ์œ„ ํ(pq)๋ฅผ ์‚ฌ์šฉํ•˜์˜€๊ณ , pq์— ๋„ฃ์ง€ ์•Š์€ ๊ณต๊ธ‰์ผ๋“ค ์ค‘ ๊ฐ€์žฅ ๋น ๋ฅธ ๋‚ ์˜ ์ธ๋ฑ์Šค๋ฅผ idx์— ์ €์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. 

 

 

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ 0์ผ์งธ ๋ถ€ํ„ฐ (k-1)์ผ์งธ๊นŒ์ง€ ๋ฐ˜๋ณต์ˆ˜ํ–‰(for๋ฌธ)ํ•ฉ๋‹ˆ๋‹ค. 

 

  1. ์˜ค๋Š˜ ๋‚ ์งœ๊ฐ€ idx๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ณต๊ธ‰์ผ๊ณผ ๊ฐ™์„ ๊ฒฝ์šฐ
    • pq์— ๊ณต๊ธ‰๋Ÿ‰ ์ €์žฅ
    • idx๊ฐ€ ๋‹ค์Œ ๊ณต๊ธ‰์ผ์„ ๊ฐ€๋ฆฌํ‚ด
  2. stock์„ ๋‹ค ์ผ์„ ๊ฒฝ์šฐ ( => ๊ณต๊ธ‰ ๋ฐ›์•„์•ผ ํ•จ)
    • ๊ฐ€๋Šฅํ•œ ์ œ์ผ ํฐ ๊ณต๊ธ‰๋Ÿ‰(pq.top())์„ ๊ณต๊ธ‰ ๋ฐ›์Œ
    • ๊ณต๊ธ‰ ๋ฐ›์€ ๋‚ ์งœ์˜ ๊ณต๊ธ‰๋Ÿ‰ ์‚ญ์ œ(pq.pop())
    • answer์— 1 ๋”ํ•ด์ฃผ๊ธฐ
  3. stock-- (๋งค์ผ ๋ฐ€๊ฐ€๋ฃจ 1ํ†ค์”ฉ ์†Œ๋ชจ)

 

 

 

์†Œ์Šค์ฝ”๋“œ

 

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
// ๋ผ๋ฉด ๊ณต์žฅ
#include <iostream>
#include <vector>
#include <functional>
#include <queue>
 
using namespace std;
 
int solution(int stock, vector<int> dates, vector<int> supplies, int k) {
    int answer = 0;
    priority_queue<intvector<int>, less<int> > pq; // ์ตœ๋Œ€ํž™์„ ๋งŒ์กฑํ•˜๋Š” ์šฐ์„ ์ˆœ์œ„ ํ
    int idx = 0// pq์— ๋„ฃ์ง€ ์•Š์€ dates ์ค‘์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฒƒ์˜ index
 
    for (int day = 0; day < k; day++) { // 0์ผ์งธ๋ถ€ํ„ฐ (k-1)์ผ์งธ๊นŒ์ง€ ๋ฐ˜๋ณต
        if (dates[idx] == day) { // ๊ณต๊ธ‰๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๋‚ ์ด ๋˜์—ˆ์„ ๊ฒฝ์šฐ
            pq.push(supplies[idx]); // pq์— ๊ณต๊ธ‰๋Ÿ‰ ์ €์žฅ
            if (idx != dates.size() - 1// dates ๋ฒกํ„ฐ ๋ฒ”์œ„ ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€
                idx++// ๋‹ค์Œ ๊ณต๊ธ‰์ผ์„ ๊ฐ€๋ฆฌํ‚ด
        }
        if (stock == 0) { // stock์„ ๋‹ค ์ผ์„ ๊ฒฝ์šฐ
            stock += pq.top(); // ๊ณต๊ธ‰๋Ÿ‰์ด ์ œ์ผ ํฐ ๋‚ ์งœ์— ๊ณต๊ธ‰ ๋ฐ›์Œ
            pq.pop();
            answer++;
        }
        stock--;
    }
 
    return answer;
}
cs

 

 

 

 

 

๊ณต๋ถ€ํ•œ ๊ฒƒ์„ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์ˆ˜์ •ํ•  ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค :)

 

 

728x90