프로그래머스 풀이

[lv.2] 프로그래머스 올바른 괄호(c++)

Iam_noob 2023. 12. 7. 06:26
728x90
반응형

문제 설명

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어

  • "()()" 또는 "(())()" 는 올바른 괄호입니다.
  • ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.

'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.

제한사항

  • 문자열 s의 길이 : 100,000 이하의 자연수
  • 문자열 s '(' 또는 ')' 로만 이루어져 있습니다.

 

풀이

스택/큐를 활용하는 문제로 스택을 활용하여 괄호를 열고 닫아진 짝을 체크 할 수 있다.

짝지어진 괄호는 pop으로 날려버리면 스택 속이 비었을 때 올바른 괄호이다. 마지막에 스택 속에 괄호가 남아있다면 올바르지 않은 괄호가 된다. 추가로 시작 괄호는 무조건 열려야함으로 이름 

제출한 답 (c++) :

#include<string>
#include <iostream>
#include <stack>

using namespace std;

bool solution(string s)
{
    bool answer = true;
    stack<char> st;
    
    int size = s.length();
    char leftBrac = '(';
    char rightBrac = ')';
   
    for(int i = 0; i<size; i++)
    {
            if(s[i] == leftBrac)
                st.push(leftBrac);
            else
            {
                if(!st.empty())
                    st.pop();
                else
                    st.push(rightBrac);
            }
    }
    if(s[0] == leftBrac)
    {    
        if(!st.empty())
            return answer = false;
        else 
            return answer;
    }
    else
    	return answer = false;
}

 

728x90
반응형