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

알고리즘Python스택
avatar
2025.03.21
·
3 min read

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

문제

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

  • "()()" 또는 "(())()" 는 올바른 괄호입니다.

  • ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.

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

제한사항

  • 문자열 s의 길이 : 100,000 이하의 자연수

  • 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.

입출력 예

s

answer

"()()"

true

"(())()"

true

")()("

false

"(()("

false


풀이 - 스택 활용

접근 방식

  1. '(' 이면, 스택에 추가

  2. ')' 일 때, 만약 스택이 비어있으면 False 반환
    스택이 비어있지 않으면 pop() 을 통해 제거

  3. 위의 반복문을 끝낸 후, 스택이 비어있으면 True 반환
    비어있지 않으면 False 반환

def solution(s):
    stack = []
    for i in s:
        if i == '(':
            stack.append(i)
        else:
            if not stack:
                return False
            else:
                stack.pop()
                
    if not stack:
        return True
    else:
        return False

다른 사람 풀이

좀 더 효율적인 풀이가 있나 다른 사람들의 풀이를 찾아봤더니, 스택을 사용하지 않고 풀었다. 좀 더 직관적인 것 같기도 하다.

def is_pair(s):
    wt = 0
    for c in s :
        if c == '(' : wt += 1
        elif c == ')' : wt -= 1
        if wt < 0 : return False
    return wt == 0






- 컬렉션 아티클