프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


나의 풀이

  • [ic]([/ic] 괄호가 나올 때만 스택에 저장해뒀다가, [ic])[/ic] 괄호가 나오면 pop()을 진행해 제거했다.
  • pop() 과정에서 런타임 오류가 발생하지 않도록, 짝이 불가능한 경우 False를 바로 반환했다.
def solution(s):
    # 짝 확인
    stack = []
    for char in s:
        if char == "(":
            stack.append(char)
        else:
            # 짝 불가능
            if len(stack) == 0:
                return False
            else:
                stack.pop()
    return len(stack) == 0

 

다른 사람 풀이

  • 스택의 개념만 활용하고 자료형을 활용하지는 않았다.
def solution(s):
    OPEN = '('
    CLOSE = ')'
    count = 0

    for char in s:
        if char == OPEN:
            count += 1
        if char == CLOSE:
            count -= 1
        # count값이 0보다 작아졌다는 뜻은, 이미 짝이 맞지 않는다는 뜻이므로 early return
        # ex: '())', ')(' 이런 경우
        if count < 0:
            return False

    return count == 0
 

프로그래머스 / 올바른 괄호 / level2 / 파이썬

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

fierycoding.tistory.com


참고하면 좋을 자료

 

[실전 알고리즘] 0x08강 - 스택의 활용(수식의 괄호 쌍)

안녕하세요, 0x05강에서 스택을 다룰 때 후반부에 얘기를 하기도 했었지만 스택의 대표적인 활용 사례로 수식의 괄호 쌍이랑 전위/중위/후위 표기법, DFS, Flood Fill 등이 있습니다. 이 중에서 전위/

blog.encrypted.gg