๐Ÿ“• Algorithm

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋” ๋งต๊ฒŒ (C++)

ํ•œ์ฝ”๋”ฉ 2020. 12. 24. 11:03
728x90
728x90

๋ฌธ์ œ ์„ค๋ช…

๋งค์šด ๊ฒƒ์„ ์ข‹์•„ํ•˜๋Š” 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 ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

[1, 2, 3, 9, 10, 12] 7 2

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

  1. ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ 1์ธ ์Œ์‹๊ณผ 2์ธ ์Œ์‹์„ ์„ž์œผ๋ฉด ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฉ๋‹ˆ๋‹ค.
    ์ƒˆ๋กœ์šด ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ = 1 + (2 * 2) = 5
    ๊ฐ€์ง„ ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ = [5, 3, 9, 10, 12]
  2. ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ 3์ธ ์Œ์‹๊ณผ 5์ธ ์Œ์‹์„ ์„ž์œผ๋ฉด ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฉ๋‹ˆ๋‹ค.
    ์ƒˆ๋กœ์šด ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ = 3 + (5 * 2) = 13
    ๊ฐ€์ง„ ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ = [13, 9, 10, 12]

๋ชจ๋“  ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ 7 ์ด์ƒ์ด ๋˜์—ˆ๊ณ  ์ด๋•Œ ์„ž์€ ํšŸ์ˆ˜๋Š” 2ํšŒ์ž…๋‹ˆ๋‹ค.

 

#include <bits/stdc++.h>

using namespace std;

int solution(vector<int> scoville, int K) {
    int answer = 0;
    int low, second;
    
    // ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์ด์šฉํ•˜์—ฌ push๊ฐ€ ์ผ์–ด๋‚˜๋ฉด ์ž๋™ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์ด ๋˜๊ฒŒ ํ•จ
    priority_queue<int, vector<int>, greater<int>> sc(scoville.begin(), scoville.end());
    
    // sc.top์€ ๊ฐ€์žฅ ๋‚ฎ์€ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜์ด์ž ์ตœ๊ทผ ๊ณ„์‚ฐ๋œ ์„ž์€ ์ง€์ˆ˜
    // top์ด K๋ณด๋‹ค ๋†’์œผ๋ฉด ๋ฐ˜๋ณต๋ฌธ ์ค‘๋‹จ
    while(sc.top() < K){
        
        // ๋”์ด์ƒ ์„ž์„ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ ์—†์œผ๋ฉด ๋ถˆ๊ฐ€๋Šฅ์ด๋ฏ€๋กœ -1 ๋ฆฌํ„ด
        if(sc.size() == 1)
            return -1;
        
        // ๊ฐ€์žฅ ๋‚ฎ์€ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜
        low = sc.top();
        sc.pop();
        
        // ๋‘๋ฒˆ์งธ๋กœ ๋‚ฎ์€ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜
        second = sc.top();
        sc.pop();
        
        // ์„ž์€ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ ์‚ฝ์ž…
        sc.push(low + second * 2);
        
        // ์„ž์€ ํšŸ์ˆ˜ ์ฆ๊ฐ€
        answer++;
    }

    return answer;
}

 

์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ณ„์‚ฐ๋œ ๊ฐ’์„ ๋„ฃ์œผ๋ฉด ์ž๋™์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•œ ๋ฌธ์ œ์ด๋‹ค.

๋ฒกํ„ฐ์˜ eraseํ•จ์ˆ˜ ์ด์šฉ ์‹œ ์‹œ๊ฐ„์ดˆ๊ณผ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

โ€‹

์šฐ์„ ์ˆœ์œ„ ํ ๊ฐ€์žฅ ์•ž์— ์กด์žฌํ•˜๋Š” ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜์ด๊ณ ,

ํ์˜ ๊ฐ€์žฅ ์•ž์„ popํ•˜๊ณ  ๋‹ค์‹œ ์ฒซ๋ฒˆ์งธ ํ์˜ ๊ฐ’์ด ๋‘๋ฒˆ์งธ๋กœ ๋‚ฎ์€ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜์ด๋‹ค.

 

๊ณต์‹๋Œ€๋กœ ๊ณ„์‚ฐํ•œ ๊ฐ’์„ ์šฐ์„ ์ˆœ์œ„ ํ์— ์‚ฝ์ž…ํ•˜๋ฉด ์ž๋™ ์ •๋ ฌ๋˜๊ณ , ์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

์šฐ์„ ์ˆœ์œ„ ํ์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ 1์ด๋ผ๋ฉด ์„ž์„ ์Œ์‹์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— -1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•