๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

#๊ธฐ๋Šฅ๊ฐœ๋ฐœ

by flowing1ife 2023. 3. 3.
  • ๋ฌธ์ œ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ํŒ€์—์„œ๋Š” ๊ธฐ๋Šฅ ๊ฐœ์„  ์ž‘์—…์„ ์ˆ˜ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. ๊ฐ ๊ธฐ๋Šฅ์€ ์ง„๋„๊ฐ€ 100%์ผ ๋•Œ ์„œ๋น„์Šค์— ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜, ๊ฐ ๊ธฐ๋Šฅ์˜ ๊ฐœ๋ฐœ์†๋„๋Š” ๋ชจ๋‘ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋’ค์— ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์•ž์— ์žˆ๋Š” ๊ธฐ๋Šฅ๋ณด๋‹ค ๋จผ์ € ๊ฐœ๋ฐœ๋  ์ˆ˜ ์žˆ๊ณ , ์ด๋•Œ ๋’ค์— ์žˆ๋Š” ๊ธฐ๋Šฅ์€ ์•ž์— ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋  ๋•Œ ํ•จ๊ป˜ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

๋จผ์ € ๋ฐฐํฌ๋˜์–ด์•ผ ํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ž‘์—…์˜ ์ง„๋„๊ฐ€ ์ ํžŒ ์ •์ˆ˜ ๋ฐฐ์—ด progresses์™€ ๊ฐ ์ž‘์—…์˜ ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ์ ํžŒ ์ •์ˆ˜ ๋ฐฐ์—ด speeds๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ๊ฐ ๋ฐฐํฌ๋งˆ๋‹ค ๋ช‡ ๊ฐœ์˜ ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋˜๋Š”์ง€๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

  • ์ฝ”๋“œ
#include <iostream>
#include <vector>
#include <stack>

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    int due; //์ž‘์—…๊ธฐ๊ฐ„
    stack<int> s;
    vector<int> answer;

    for (int i = (progresses.size()-1); i >= 0 ; i--) { // progresses size ๋งŒํผ ๋ฐ˜๋ณต

        // ์—ฐ์‚ฐ 
        due = ((100 - progresses[i]) / speeds[i]);

        if (((100 - progresses[i]) % speeds[i]) != 0) {
            // ๋‚˜๋จธ์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด
            due++;
        }

        s.push(due);
    }

    //ํ•œ๋ฒˆ์— ๋ฐฐํฌ๋˜๋Š” ๊ธฐ๋Šฅ์˜ ๊ฐœ์ˆ˜ ์—ฐ์‚ฐ
    while (!s.empty()) { //์Šคํƒ์ด ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
        int num = 0; //ํ•œ๋ฒˆ์— ๋ฐฐํฌ๋˜๋Š” ๊ธฐ๋Šฅ์˜ ๊ฐœ์ˆ˜
        int top = s.top();

        while (!s.empty() && s.top() <= top) {
            num++;
            s.pop();
        }
        answer.push_back(num);
    }

       
    return answer;
}
  • ํ•ด์„ค

1. solution(vector<int> progresses, vector<int> speeds)

- ๊ฐ ๋ฐฐํฌ๋งˆ๋‹ค ๋ช‡๊ฐœ์˜ ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋˜๋Š”์ง€๋ฅผ return ํ•˜๋Š” ํ•จ์ˆ˜

: ์ž‘์—…๊ธฐ๊ฐ„ ๋ณ€์ˆ˜์™€ ์Šคํƒ ๋ฐ ์ถœ๋ ฅํ•œ answer ๋ฒกํ„ฐ ๋ฐฐ์—ด์„ ์„ ์–ธ

: for๋ฌธ์„ ํ†ตํ•ด progresses size ๋งŒํผ ๊ฐ ์ž‘์—…์— ๊ฑธ๋ฆฌ๋Š” ๊ธฐ๊ฐ„ ์—ฐ์‚ฐ ๋ฐ˜๋ณต

: due ๋ฅผ ๊ณ„์‚ฐ 

: ๋งŒ์•ฝ (100 - progresses[i])๋ฅผ speeds[i]๋กœ ๋‚˜๋ˆ„์—ˆ์„ ๋•Œ ๋‚˜๋จธ์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ์ž‘์—…๊ธฐ๊ฐ„์ด ํ•˜๋ฃจ ๋” ํ•„์š”ํ•˜๋ฏ€๋กœ due 1 ์ฆ๊ฐ€

: ๊ทธ๋ฆฌ๊ณ  ์ž‘์—… ๊ธฐ๊ฐ„์„ ์Šคํƒ์— ์‚ฝ์ž… 

: ๊ฐ ์ž‘์—…์— ๋Œ€ํ•œ due๋ฅผ ๋ชจ๋‘ ๊ณ„์‚ฐํ–ˆ๋‹ค๋ฉด ์Šคํƒ์ด ๋นŒ ๋•Œ๊นŒ์ง€ ํ•œ๋ฒˆ์— ๋ฐฐํฌ๋˜๋Š” ๊ธฐ๋Šฅ์˜ ๊ฐœ์ˆ˜ ์—ฐ์‚ฐํ•˜๋Š” ๊ณผ์ • ๋ฐ˜๋ณต

: ํ•œ ๋ฒˆ์— ๋ฐฐํฌ๋˜๋Š” ๊ธฐ๋Šฅ์˜ ๊ฐœ์ˆ˜๋ฅผ num์œผ๋กœ ๋‘๊ณ  0์œผ๋กœ ์ดˆ๊ธฐํ™”

: ์Šคํƒ์˜ top์„ ๊ธฐ์ค€์ ์œผ๋กœ ์‚ผ๊ณ  ์Šคํƒ์ด ๋น„์ง€ ์•Š๊ณ  ์Šคํƒ์˜ top์ด ๊ธฐ์ค€์ ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋ฉด num์„ ์ฆ๊ฐ€ ์‹œํ‚ค๊ณ  ๊ทธ due๋ฅผ ์ œ๊ฑฐ, ์ด๋ฅผ while๋ฌธ์œผ๋กœ ๋ฐ˜๋ณต

: ๊ทธ๋ฆฌ๊ณ  num ๊ณ„์‚ฐ์ด ๋๋‚˜๋ฉด ์ด๋ฅผ answer ๋ฒกํ„ฐ ๋ฐฐ์—ด์— ์ถ”๊ฐ€ 

: ๋งˆ์ง€๋ง‰์œผ๋กœ answer ๋ฒกํ„ฐ ๋ฐฐ์—ด์„ return