λμ΄λ: Medium
ν€μλ: Stack
λ¬Έμ
μΈμ½λ©λ λ¬Έμμ΄μ΄ μ£Όμ΄μ§λ©΄ ν΄λΉ λ¬Έμμ΄μ λμ½λ©ν λ¬Έμμ΄μ λ°νν©λλ€. μΈμ½λ© κ·μΉμ λ€μκ³Ό κ°μ΅λλ€:
k[μΈμ½λ©λ_λ¬Έμμ΄], μ¬κΈ°μ λκ΄νΈ λ΄μ μΈμ½λ©λ λ¬Έμμ΄μ΄ kλ² μ νν λ°λ³΅λ©λλ€.
kλ μμ μ μμμ΄ λ³΄μ₯λ©λλ€.
μ
λ ₯ λ¬Έμμ΄μ΄ νμ μ ν¨νλ€κ³ κ°μ ν μ μμ΅λλ€. μΆκ°μ μΈ κ³΅λ°±μ΄λ λκ΄νΈκ° μ νμ±λμ΄ μμ§ μμ΅λλ€. λν μλ³Έ λ°μ΄ν°μλ μ«μκ° ν¬ν¨λμ΄ μμ§ μμΌλ©° μ«μλ λ°λ³΅ νμ kλ§μ μν κ²μ
λλ€.
μλ₯Ό λ€μ΄, 3a λλ 2[4]μ κ°μ μ λ ₯μ μμ΅λλ€. ν μ€νΈ μΌμ΄μ€λ μΆλ ₯μ κΈΈμ΄κ° νμ 10^5λ₯Ό μ΄κ³Όνμ§ μλλ‘ μμ±λ©λλ€.
μ λ ₯ μμ
Example 1:
Input: s = "3[a]2[bc]"
Output: "aaabcbc"
λ¬Έμ μλ¬Έ: https://leetcode.com/problems/decode-string/description/
λ¬Έμ νμ΄
- κ΄νΈκ° μλ λ¬Έμ λ κΈ°λ³Έμ μΌλ‘ stack μλ£νμ μ¬μ©νλ©΄ μ½κ² ν μ μλ€.
- κ·Έλμ stackμ μ¬μ©ν΄μ λ¬Έμ λ₯Ό νμλ€.
- λ³λμ stack μλ£νμ λμ§ μκ³ vector<char>λ₯Ό λ¬μ νμλλ°, top() μ‘°νλ `stack.back()` μΌλ‘, pop() μ°μ°μλ `stack.erase(stack.end()-1)`λ‘ κ΅¬ννμλ€.
- μμ΄λμ΄λ ]λ₯Ό λ§λ λκΉμ§μ μ 보λ₯Ό λͺ¨λ stack μ μ μ₯νκ³ , ]λ₯Ό λ§λλ©΄ [λ₯Ό λ§λ λκΉμ§μ μ 보λ₯Ό tmp_stackμ λ£μ΄λμλ€κ°. μ΄μ΄μ λνλλ μ«μ (μ΄ λ, νμ리 μκ° μλκΈ° λλ¬Έμ while λ¬Έμ κ°μ§κ³ μ«μ Nμ μ°Ύμ) λ§νΌ λ°λ³΅ν΄μ stackμ λ£μ΄μ€¬λ€.
- μ΅μ’ μ μΌλ‘ stack μμ λ΄κ²¨μλ κ°μ stringμΌλ‘ λ°ννλ€.
class Solution {
public:
string decodeString(string s) {
vector<char> stack;
for(auto c : s){
if(c == ']'){
vector<char> tmp_stack;
while(stack.back() != '['){
// pop from stack and push into tmp_stack
tmp_stack.emplace_back(stack.back());
stack.erase(stack.end()-1);
}
// remove dummy '['
stack.erase(stack.end()-1);
// pop number from stack
int digit = 0;
int N = 0;
while(stack.size() > 0 && stack.back() >= 48 && stack.back() <= 58){
N += (int(stack.back())-48) * (pow(10,digit++));
stack.erase(stack.end()-1);
}
cout << N << endl;
// push substring in tmp_stack to stack N times
for(int _ = 0; _ < N; ++_){
for(auto it = tmp_stack.end()-1; it >= tmp_stack.begin(); it--)
stack.emplace_back(*it);
}
} else {
stack.emplace_back(c);
}
}
return string(stack.begin(), stack.end());
}
};

'IN DEPTH CAKE > Supercoder' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[c++/LeetCode-Hash Table] 387. First Unique Character in a String (1) | 2024.05.05 |
---|---|
[c++/LeetCode-Hash Table] 1. Two Sum (1) | 2024.05.05 |
[c++/LeetCode-Stack] 1047. Remove All Adjacent Duplicates In String (1) | 2024.05.05 |
[c++/LeetCode-Stack] 155. MinStack (1) | 2024.05.05 |
[c++/LeetCode-2DArray] 48. Rotate Image (1) | 2024.05.05 |