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

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / C++] ๋” ๋งต๊ฒŒ ํ’€์ด

meeeeejin 2020. 7. 24. 17:39
๋ฌธ์ œ ์„ค๋ช…

 

๋งค์šด ๊ฒƒ์„ ์ข‹์•„ํ•˜๋Š” Leo๋Š” ๋ชจ๋“  ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๋ฅผ K ์ด์ƒ์œผ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๋ฅผ K ์ด์ƒ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด Leo๋Š” ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ๋‘ ๊ฐœ์˜ ์Œ์‹์„ ์•„๋ž˜์™€ ๊ฐ™์ด ํŠน๋ณ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์„ž์–ด ์ƒˆ๋กœ์šด ์Œ์‹์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

 

์„ž์€ ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜=๊ฐ€์žฅ ๋งต์ง€ ์•Š์€ ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜+(๋‘ ๋ฒˆ์งธ๋กœ ๋งต์ง€ ์•Š์€ ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜*2)

 

Leo๋Š” ๋ชจ๋“  ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ K ์ด์ƒ์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜์—ฌ ์„ž์Šต๋‹ˆ๋‹ค.
Leo๊ฐ€ ๊ฐ€์ง„ ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด scoville๊ณผ ์›ํ•˜๋Š” ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ K๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๋ชจ๋“  ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๋ฅผ K ์ด์ƒ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์„ž์–ด์•ผ ํ•˜๋Š” ์ตœ์†Œ ํšŸ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

 

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

  • scoville์˜ ๊ธธ์ด๋Š” 2 ์ด์ƒ 1,000,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • K๋Š” 0 ์ด์ƒ 1,000,000,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • scoville์˜ ์›์†Œ๋Š” ๊ฐ๊ฐ 0 ์ด์ƒ 1,000,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๋ฅผ K ์ด์ƒ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ return ํ•ฉ๋‹ˆ๋‹ค.

 

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

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๋” ๋งต๊ฒŒ

๋งค์šด ๊ฒƒ์„ ์ข‹์•„ํ•˜๋Š” Leo๋Š” ๋ชจ๋“  ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๋ฅผ K ์ด์ƒ์œผ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๋ฅผ K ์ด์ƒ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด Leo๋Š” ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ๋‘ ๊ฐœ์˜ ์Œ์‹์„ ์•„๋ž˜์™€ ๊ฐ™๏ฟฝ๏ฟฝ

programmers.co.kr

 

 

 

๋ฌธ์ œ ํ’€์ด

 

์ตœ์†Œ ํž™์„ ๋งŒ์กฑํ•˜๋Š” ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์ด์šฉํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. 

 

์šฐ์„ ์ˆœ์œ„ ํ(priority queue)๋Š” ์ตœ๋Œ€ ํž™๊ณผ ์ตœ์†Œ ํž™ ๋‘ ์ข…๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ๋Œ€ ํž™(max-heap)์€ ํ ๋‚ด์˜ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์ตœ์†Œ ํž™(min-heap)์€ ํ ๋‚ด์˜ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์—์„  ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ๊ฒƒ ๋‘ ๊ฐœ๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ์ตœ์†Œ ํž™์„ ๋งŒ์กฑํ•˜๋Š” ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

 

  1. ์ตœ์†Œํž™์„ ๋งŒ์กฑํ•˜๋Š” ์šฐ์„ ์ˆœ์œ„ ํ(pq)์— ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ ๋ฐฐ์—ด์˜ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
  2. pq์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’(x)๊ณผ ๋‘ ๋ฒˆ์งธ๋กœ ์ž‘์€ ๊ฐ’(y)์„ ๊บผ๋‚ธ๋‹ค. (์ด๋•Œ, pq์˜ ์›์†Œ๊ฐ€ 1๊ฐœ๋ฟ์ด๋ผ๋ฉด return -1)
  3. ์ƒˆ๋กœ ๋งŒ๋“  ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜(x + y*2)๋ฅผ pq์— ์ €์žฅํ•˜๊ณ  answer์— 1์„ ๋”ํ•œ๋‹ค. 
  4. pq์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์ด K ์ด์ƒ์ด 2, 3์„ ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค. 

 

 

 

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

 

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
32
33
// ๋” ๋งต๊ฒŒ
#include <iostream>
#include <vector>
#include <functional>
#include <queue>
 
using namespace std;
 
// min-heap(์ตœ์†Œ ํž™)์„ ๋งŒ์กฑํ•˜๋Š” ์šฐ์„ ์ˆœ์œ„ ํ ์„ ์–ธ
priority_queue< intvector<int>, greater<int> > pq;
 
int solution(vector<int> scoville, int K) {
    int answer = 0;
 
    // ์ตœ์†Œ ํž™์— ์›์†Œ ์ถ”๊ฐ€
    for (int i = 0; i < scoville.size(); i++) {
        pq.push(scoville[i]);
    }
 
    while (pq.top() < K) {
        int x = pq.top(); // ๊ฐ€์žฅ ์•ˆ ๋งค์šด ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜
        pq.pop();
        if (pq.empty()) // ๋ชจ๋“  ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๋ฅผ K ์ด์ƒ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ
            return -1;
        int y = pq.top(); // ๋‘ ๋ฒˆ์งธ๋กœ ์•ˆ ๋งค์šด ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜
        pq.pop();
 
        pq.push(x + y * 2); // ์ƒˆ๋กœ ๋งŒ๋“  ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ push
        answer++;
    }
 
    return answer;
}
cs

 

 

 

 

 

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

 

 

728x90