[c++] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค :: ํƒ‘ (๋ฌธ์ œ ํ’€์ด, ์ฝ”๋“œ)

ํƒ‘

https://programmers.co.kr/learn/courses/30/lessons/42588?language=cpp

 

์ฝ”๋“œ

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

using namespace std;

vector<int> solution(vector<int> heights) {
    int heights_len = heights.size();
    vector<int> answer(heights_len);
    stack<int> stk; // index, key

    for (int i = heights_len - 1; i>0; i--) {
        if (heights[i - 1] > heights[i]) {
            answer[i] = i;

            // stack
            while (stk.size() != 0) {
                auto tmp = stk.top();
                if (heights[tmp] < heights[i - 1]) {
                    answer[tmp] = i;
                    stk.pop();
                }
                else
                    break;
            }
        }
        else {
            stk.push(i);
        }
    }

    int len = stk.size();
    while (len-- > 0) {
        auto tmp = stk.top();
        stk.pop();
        answer[tmp] = 0;
    }

    return answer;
}

 

์„ค๋ช…

 ํƒ‘์€ ์ž์‹ ๋ณด๋‹ค ํฌ๊ณ , ์•ž์— ์žˆ๋Š” ํƒ‘์—๊ฒŒ๋งŒ ์‹ ํ˜ธ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค. ๋’ค์ชฝ ํƒ‘๋ถ€ํ„ฐ ์•ž์ชฝ ํƒ‘์œผ๋กœ ๊ฐ€๋ฉด์„œ ์–ด๋–ค ํƒ‘์—๊ฒŒ ์‹ ํ˜ธ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณด์ž.

 

 5๋ฒˆ ํƒ‘๋ถ€ํ„ฐ ์‚ดํŽด๋ณด์ž. ์šฐ๋ฆฌ๋Š” ๊ทธ๋ฆผ์„ ์ง๊ด€์ ์œผ๋กœ ๋ณด์•˜์„ ๋•Œ, 5๋ฒˆ ํƒ‘ ์•ž์— ์žˆ๋Š” ํƒ‘๋“ค์ด ๋ชจ๋‘ 5๋ฒˆ ํƒ‘๋ณด๋‹ค ์ž‘์€ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ 5๋ฒˆ ํƒ‘์€ ์–ด๋–ค ํƒ‘์—๊ฒŒ๋„ ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ด์ง€ ๋ชปํ•œ๋‹ค. ๊ทธ๋ฆผ์„ ๊ทธ๋ ค๋†“๊ณ  ๋ณด๋ฉด ์†์‰ฝ๊ฒŒ ์ด ์‚ฌ์‹ค์„ ์•Œ ์ˆ˜ ์žˆ์ง€๋งŒ, ์‚ฌ์‹ค ํ”„๋กœ๊ทธ๋žจ ์ƒ์—์„œ๋Š” ์•ž์„  ๋ชจ๋“  ํƒ‘์˜ ๋†’์ด๋ฅผ ํ˜„์žฌ ํƒ‘์˜ ๋†’์ด์™€ ๋น„๊ตํ•ด๋ณด๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ๊ฐ„๋‹จํ•˜์—ฌ ์‹ค์ œ๋กœ heights๊ฐ€ 100์ดํ•˜์ธ ํ•ด๋‹น ๋ฌธ์ œ์—์„œ 10^4 ๋งŒํผ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.

 

 ํ•˜์ง€๋งŒ ๋ณด๋‹ค ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด์ž.

 ํ•˜๋‚˜์”ฉ ๋Š์–ด์„œ ๊ทœ์น™์„ ์ฐพ์•„๋ณด๋ฉด, ๋‘ ๊ฐœ์˜ ํƒ‘์ด ์žˆ์„ ๋•Œ ์•ž์„  ํƒ‘์ด ๋’ค์˜ ํƒ‘๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด ๋’ค์˜ ํƒ‘์€ ์•ž์„  ํƒ‘์—๊ฒŒ ์‹ ํ˜ธ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์—†๋‹ค. ๋ฐ˜๋Œ€๋กœ ์•ž์„  ํƒ‘์ด ๋” ํฌ๋‹ค๋ฉด ๋’ค์˜ ํƒ‘์€ ์•ž์„  ํƒ‘์—๊ฒŒ ์‹ ํ˜ธ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 ์ด ๊ทœ์น™์„ ์ด์šฉํ•ด์„œ ์—ฌ๋Ÿฌ ํƒ‘์ด ์กด์žฌํ•  ๋•Œ๋ฅผ ์‚ดํŽด๋ณด์ž.

 ๋’ค์—์„œ๋ถ€ํ„ฐ ์•ž์œผ๋กœ ์˜ค๋ฉด์„œ ์‚ดํŽด๋ณด๋ฉด, 4๋ฒˆ ํƒ‘์€ 3๋ฒˆ ํƒ‘๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฏ€๋กœ 3๋ฒˆ ํƒ‘์— ์‹ ํ˜ธ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์—†๋‹ค. ํ•˜์ง€๋งŒ 2๋ฒˆ ํƒ‘๋ณด๋‹ค๋Š” ์ž‘์œผ๋ฏ€๋กœ 2๋ฒˆ ํƒ‘์— ์‹ ํ˜ธ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฏธ 2๋ฒˆ ํƒ‘์— ์‹ ํ˜ธ๋ฅผ ์ „์†กํ–ˆ์œผ๋ฏ€๋กœ 1๋ฒˆ ํƒ‘๊ณผ์˜ ๊ด€๊ณ„๋Š” ์‚ดํŽด๋ณผ ํ•„์š”๊ฐ€ ์—†๋‹ค.

 

 ์ด๋ ‡๊ฒŒ ํƒ‘์ด ์—ฌ๋Ÿฌ๊ฐœ์ผ ๋•Œ๋Š” ์•ž์„  ํƒ‘๊ณผ์˜ 1:1 ๊ด€๊ณ„๋ฅผ ์‹ ํ˜ธ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ํƒ‘๊นŒ์ง€๋งŒ ์กฐ์‚ฌํ•˜๋ฉด ๋œ๋‹ค. ๋‹ค๋งŒ ํ˜„์žฌ์˜ ๋ฐฉ๋ฒ•์€ (4,3)์กฐ์‚ฌ => (4,2)์กฐ์‚ฌ => (3,2) ์กฐ์‚ฌ => (2,1) ์กฐ์‚ฌ ์˜ ์ˆœ์„œ์ด๋‹ค. ์ด๋ฅผ ์Šคํƒ์„ ์ด์šฉํ•ด์„œ ์•ฝ๊ฐ„ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ”๋ณด๋ฉด ํ›จ์”ฌ ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 ํ˜„์žฌ ํƒ‘๋ณด๋‹ค ํ•œ์นธ ์•ž์— ์žˆ๋Š” ํƒ‘์ด ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด ์Šคํƒ์— ์ €์žฅํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์ •๋‹ต๋ฐฐ์—ด์— ๋‹ต์„ ์ €์žฅํ•˜๊ธฐ๋กœ ํ•˜์ž. ๊ทธ๋ ‡๋‹ค๋ฉด ์œ„์˜ ๊ทธ๋ฆผ์—์„œ๋Š” 4๊ฐ€ ์Šคํƒ์— ์ €์žฅ๋˜์–ด์žˆ์„ ๊ฒƒ์ด๋‹ค. 3๋ฒˆ ํƒ‘์œผ๋กœ ๋„˜์–ด๊ฐ€์„œ ๋˜‘๊ฐ™์ด ๋น„๊ตํ•ด๋ณธ๋‹ค๋ฉด 2๋ฒˆ ํƒ‘์€ 3๋ฒˆ ํƒ‘๋ณด๋‹ค ํฌ๋ฏ€๋กœ 3๋ฒˆ ํƒ‘์˜ ์ •๋‹ต์€ 2์ด๋‹ค. ์ด ๋•Œ, ์Šคํƒ์— ๋“ค์–ด์žˆ๋˜ 4๋ฒˆ ํƒ‘๊ณผ๋„ ๋น„๊ต๋ฅผ ํ•ด๋ณธ๋‹ค. 2๋ฒˆ ํƒ‘์ด 4๋ฒˆ ํƒ‘๋ณด๋‹ค ํฌ๋ฏ€๋กœ 4๋ฒˆ ํƒ‘์˜ ์ •๋‹ต๋„ 2์ด๋‹ค. (4,3)์กฐ์‚ฌ => (3,2)์กฐ์‚ฌ => (4,2)์กฐ์‚ฌ => (2,1)์กฐ์‚ฌ ์ˆœ์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด๋‹ค.

 

์ด๋ ‡๊ฒŒ ์Šคํƒ์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ์œ ๋ฆฌํ•˜๋‹ค.

 ์Šคํƒ์„ ์ด์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์ด์—ˆ๋‹ค๋ฉด, (6,5)=>(6,4)=>(6,3)=>(6,2)๋ฅผ ์กฐ์‚ฌํ•ด์•ผํ•˜๋Š” ๊ฒƒ์„ ์Šคํƒ ์‚ฌ์šฉ ํ›„, (6,5)=>(6,2)๋กœ ์ค„์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์‹ค์ œ๋กœ ์„ธ์–ด๋ณด๋ฉด 11๋ฒˆ์˜ ๋น„๊ต์—์„œ 8๋ฒˆ์˜ ๋น„๊ต๋กœ ์ค„์–ด๋“  ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜์‘ํ˜•