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

jh Seo·2023년 6월 20일
0

프로그래머스

목록 보기
10/32

개요

올바른 괄호

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

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

접근방식

  1. 스택을 이용하면 쉽게 풀이가 가능하다.

  2. string 형 괄호식을 char형으로 분해해서
    '(' 값이면 스택에 push연산을하고
    ')'이면 스택이 비어있는지 검사,

    else if(pStack.empty()) return false;

    스택의 top값이 ( 인지 검사를 한다.

    else if(pStack.top()=='(') pStack.pop();
    else return false;
  3. string형 괄호식을 위의 방식대로 순회가 끝났을 때,
    스택이 비어있지 않다면 잘못된 방식이다.

전체 코드

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

using namespace std;

bool solution(string s)
{
    bool answer = true;
    stack<char> pStack;
    for(char elem : s){
        if(elem=='(') pStack.push(elem);
        else if(pStack.empty()) return false;
        else if(pStack.top()=='(') pStack.pop();
        else return false;
    }
    if(pStack.size()) return false;


    return answer;
}

문풀후생

다른 풀이로는 스택을 이용하지 않고 int형 변수 n을 선언한다.
string형 괄호식을 순회하며 '(' 값이면 n++, ')' 값이면 n--를 해준다.
각 단계에서 n이 음수면 false 리턴,
순회마쳤는데 n이 0이 아니면 false리턴하는 식으로 구현한 방식도 있었다.
이 방식의 장점은 스택을 따로 선언을 안해줘도 된다.

profile
코딩 창고!

0개의 댓글