[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λ²μ λΉκ΅λ‘ μ€μ΄λ κ²μ μ μ μλ€.