본문 바로가기
Algorithm 💫/Problem Solving

[프로그래머스 ] 올바른 괄호/ C++, python3 / level2

by 돼지고기맛있다 2021. 8. 26.
반응형

 

✏️ 문제 링크

https://programmers.co.kr/learn/courses/30/lessons/12909?language=python3 

 

코딩테스트 연습 - 올바른 괄호

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

programmers.co.kr

 

✏️ 문제 설명

문제 설명

 

✏️ 풀이

이번 문제는 input으로 들어온 string이 올바른 괄호로 짝 지어져 있는지에 대해서 확인하는 함수이다. 

스택으로 간단하게 풀 수 있는데! 간단하게 원리를 말하자면

 

"만약에 스택에 가장 위에 있는 애가 ( 이고 이제 들어갈 애가 ) 이라면 스택에 가장 위에 있는 ( 를 pop 해줘!"

 

"그리고 스택이 비어있거나 위의 조건에 성립하지 않는다면 계속 스택에 쌓아주면돼 :)"

 

만약 모든 괄호가 짝이 맞는다면 마지막 스택은 비어있을 것이고 짝이 맞지 않는다면 스택은 비어있지 않다는 것으로 true or false를 return 해주면 된다!

 

✏️ 코드(python3)

def solution(s):
    answer = True
    stk=[]
    
    for p in s:
        if not stk:
            stk.append(p)
            continue
        if stk[-1] == "(" and p == ")" :
            stk.pop()
            continue
        
        stk.append(p)
            
    return not stk

 

✏️ 코드(C++)

#include <bits/stdc++.h>

using namespace std;

bool solution(string s)
{
    bool answer = true;

    stack<char> stk({s[0]});
    
    for(int i=1;i<s.size();i++){
        if(!stk.empty() && stk.top() == '(' && s[i] ==')'){
            stk.pop();
            continue;
        }
        stk.push(s[i]);
    }
    return stk.empty();
}

 

반응형

댓글