๐Ÿ’  Cpp/[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ณ ๋“์  Kit

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค][C++] ์ฃผ์‹๊ฐ€๊ฒฉ (level2)

์„ ๋‹ฌ 2025. 1. 5. 08:25
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

์ดˆ ๋‹จ์œ„๋กœ ๊ธฐ๋ก๋œ ์ฃผ์‹๊ฐ€๊ฒฉ์ด ๋‹ด๊ธด ๋ฐฐ์—ด prices๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง€์ง€ ์•Š์€ ๊ธฐ๊ฐ„์€ ๋ช‡ ์ดˆ์ธ์ง€๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”. ์ œํ•œ์‚ฌํ•ญ prices์˜ ๊ฐ ๊ฐ€๊ฒฉ์€ 1 ์ด์ƒ 10,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค. prices์˜ ๊ธธ์ด๋Š” 2 ์ด์ƒ 100,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค. ์ž…์ถœ๋ ฅ ์˜ˆ prices return [1, 2, 3, 2, 3] [4, 3, 1, 1, 0] ์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช… 1์ดˆ ์‹œ์ ์˜ โ‚ฉ1์€ ๋๊นŒ์ง€ ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. 2์ดˆ ์‹œ์ ์˜ โ‚ฉ2์€ ๋๊นŒ์ง€ ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. 3์ดˆ ์‹œ์ ์˜ โ‚ฉ3์€ 1์ดˆ๋’ค์— ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง‘๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 1์ดˆ๊ฐ„ ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง€์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ๋ด…๋‹ˆ๋‹ค. 4์ดˆ ์‹œ์ ์˜ โ‚ฉ2์€ 1์ดˆ๊ฐ„ ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. 5์ดˆ ์‹œ์ ์˜ โ‚ฉ3์€ 0์ดˆ๊ฐ„ ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. โ€ป ๊ณต์ง€ - 2019๋…„ 2์›” 28์ผ ์ง€๋ฌธ์ด ๋ฆฌ๋‰ด์–ผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

ํ’€์ด

#include <string>
#include <vector>
#include <stack>

using namespace std;

typedef pair<int, int> ci;

vector<int> solution(vector<int> prices) {
    int n = prices.size();
    vector<int> ans(n);
    for(int i=0; i<n; i++) {
        ans[i] = n-1-i;
    }
    
    stack<ci>s;
    for(int i=0; i<n; i++) {
        int cur = prices[i];
        
        while(!s.empty() && s.top().second>cur) {
            int top_index = s.top().first;
            ans[top_index] = i - top_index;
            s.pop();
        }
        s.push({i, cur});
    }
    
    return ans;
}
๋ฐ˜์‘ํ˜•