๋์ด๋: 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 |