article thumbnail image
Published 2021. 9. 11. 03:30

# Balanced Brackets (Stacks)

[문제]

 

[코드]

string isBalanced(string s) {
    stack<char> stack;
    string result;
    int i;
    
    for(i = 0; i < s.size(); i++)
    {
        char c;
        c = s.at(i);
        
        if(c=='(' || c=='{' || c=='[')
            stack.push(c);
        else
        {            
            if(!stack.empty() && ((stack.top()=='(' && c==')') || (stack.top()=='{' && c=='}') || (stack.top()=='[' && c==']')))
                stack.pop();
            else return "NO";
        }
    }
    
    return result = stack.empty() ? "YES" : "NO";
}

 

[코드설명]

괄호의 짝을 맞추는 문제로 스택을 사용해서 해결할 수 있다.

열린 괄호일 경우 스택에 추가하고, 닫힌 괄호일 경우 스택의 top과 비교해서 짝이 맞으면 pop하여 해결 가능하다.

 

열린 괄호라면 스택에 추가.

닫힌 괄호라면 스택의 top과 비교.

빈 스택이 아니고, 짝이 맞다면 pop.

아니라면 balanced bracket이 아니므로 "NO" 반환.

for문이 끝난 후에도 스택 상태를 검사해서 빈 스택이면 "YES", 아니라면 "NO" 반환.

 

[채점 결과]

복사했습니다!