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

문제


풀이

스택을 이용하여 간단하게 해결할 수 있다.

먼저 "("의 경우와 ")"의 경우를 나눠서 생각한다.

for i in s:
        if i == "(":
            stack.append("(")

반복문을 사용하여 s(여기서는 전체 괄호)중 하나씩 뽑아 진행한다.

만약 "("가 들어올 경우 스택에 그대로 추가시켜준다.

 

else:
    if not stack:
        answer = False
        break
    if stack.pop() == ")":
        answer = False

        break

 

")"가 들어온 경우도 두가지 경우로 나누어 생각한다.

만약 )가 들어왔지만 스택이 비어있는 경우 

이전에 "("가 없이 ")"가 들어온 경우이므로 괄호가 짝지어지지 않은 경우이다.

따라서 정답이 아니므로 False로 설정하고 break한다.

 

또한 pop을 할경우 해당 문자가 ")"인 경우에도 성립이 안되므로 break한다.

 

 

if stack:
    answer = False

마지막으로 모든 반복이 끝났는데도 스택에 원소가 남아있는 경우에도 answer를 False로 바꾼다.

 

 


코드

def solution(s):
    answer = True
    stack = []
    for i in s:
        if i == "(":
            stack.append("(")
        else:
            if not stack:
                answer = False
                break
            # if stack.pop() == ")":
            #     answer = False
            #     break
    
    if stack:
        answer = False
    
        

    return answer