넘치게 채우기

[프로그래머스] 올바른 괄호 본문

PS/Programmers

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

riveroverflow 2023. 9. 26. 10:56
728x90
반응형

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

 

프로그래머스

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

programmers.co.kr

문제 유형 : 스택 / 큐

문제 난이도 : Level 2

 

문제 설명

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

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

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

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

 

풀이

스택을 하나 생성합니다.

문자열의 문자를 순차적으로 탐색하며 '('인경우 스택에 넣습니다.

')'인데, 스택이 빈 경우는 유효하지 않으므로 false를 리턴합니다.

스택이 비지 않은 경우는 하나 pop시킵니다.

 

탐색 후 스택이 비어있으면 true, 비어있지 않으면 false를 반환합니다.

 

코드

C++

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

using namespace std;

bool solution(string s)
{
    stack<char> st;
    for(int i = 0; i < s.size(); i++) {
        if(s[i] == '(') {
            st.push(s[i]);
        } else if(!st.empty()) {
            st.pop();
        } else {
            return false;
        }
    }
    return st.empty();
}
 
728x90
반응형