본문 바로가기
알고리즘/프로그래머스

[프로그래머스] 올바른 괄호 c++

by 오오오니 2024. 1. 5.

https://school.programmers.co.kr/learn/courses/30/lessons/12909

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이

스택을 이용하여 풀었다. 반복문을 돌면서 '(' 이면 글자를 스택에 넣고 ')' 이면 스택에서 글자를 빼준다.
이때 스택에 아무것도 없으면 올바른 괄호가 아니기 때문에 false이고 반복문을 다 돈 뒤에 스택에 괄호가 남아있으면 false이다.

 

#include<string>
#include <iostream>
#include <stack>
using namespace std;

stack<char> pa;
bool solution(string s)
{
    bool answer = true;
    
    //(이면 스택에 넣기
    for(auto c : s){
        if(c=='(')
            pa.push('(');
        else{
            
            //스택 비어 있으면 false
            if(pa.empty())
                return answer=false;
             //)이면 스택에서 뺴기
            pa.pop();
                
        }
    }
    
     //스택 남아있으면 false
    if(!pa.empty())
        return answer = false;
   
    
   
    
    
    return answer;
}

 

다른 사람의 풀이

괄호의 종류가 한 종류이기 때문에 스택을 쓸 필요 없이 '('괄호의 개수를 세서 int형을 사용하여 풀이를 해주었다.

스택이 비어 있다 == n이 0이다

스택이 남아있다 == n이 0이상이다.