• Feed
  • Explore
  • Ranking
/
/
    📝 알고리즘

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

    알고리즘Python스택
    유
    유댕이
    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






    - 컬렉션 아티클