오랜만에 풀어보는 리트코드 프리미엄 문제다. 사실 문제를 읽고 이걸 어떻게 푸는거지? 하고 감이 잘 안온 문제 중 하나다. 뭔가 Stack 을 사용하는 것 같기는 한데...하면서 고민해보다가 결국에는 editorial 을 한번 보고 참고 했고 깨달음을 얻었다.
이 문제는 결국 뒤에서부터 루프를 시작해서 필요한 캐릭터들을 계속 stack 에 담고 실제 operation 이 시작 될 때 stack 에서 꺼내야 하는 문제였다.
내가 stack 구조에 좀 익숙하지 않아서 아쉬운 결과가 나오기는 헀는데 그래도 좀 더 신중하게 문제를 읽고 풀어봐야겠다 라는 생각은 하게 됐다.
class Solution {
public:
string parseTernary(string expression) {
stack<char> charStack;
for(int i = expression.size()-1; i >= 0; i--){
char currChar = expression[i];
if(currChar == '?'){
char op = expression[i-1];
char forTrue = charStack.top();
charStack.pop();
char forFalse = charStack.top();
charStack.pop();
if(op == 'T'){
charStack.push(forTrue);
} else{
charStack.push(forFalse);
}
i--;
} else if(isdigit(currChar) || currChar == 'T' || currChar == 'F'){
charStack.push(currChar);
}
}
return string(1,charStack.top());
}
};