올바른 괄호 문제 바로가기

첫 번째 풀이

def solution(s):
    
    while '()' in s:
        s=s.replace('()','')
    if s == '':
        return True
    else:
        return False

두 번쨰 풀이

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

고수의 풀이

def is_pair(s):
    st = list()
    for c in s:
        if c == '(':
            st.append(c)

        if c == ')':
            try:
                st.pop()
            except IndexError:
                return False

    return len(st) == 0

출처

CODE REVIEW

  1. 첫 번째 풀이에서는 while문을 이용해서 ()가 있으면 계속 지워나가는 식으로 해결했다. 정답에는 이상이 없었지만, 효율성 측면에서는 떨어졌다.
  2. 효율성을 늘리기 위해서 다른 방법을 시도해보았다. 두 번째 풀이에서는 stack을 이용했는데, (을 stack에 쌓아가면서 조건에 따라 지워가면서 true/false을 결정했다.
  3. 고수의 풀이는 앞의 풀이와 거의 동일하지만 return len(st) == 0 부분이 마음에 들어서 가져왔다.
  4. 매우 비슷한 문제로 백준 9012번 - 괄호가 있다.