[프로그래머스] 올바른 괄호 (스택, 큐)

Seohyun·2024년 9월 1일
1

알고리즘

목록 보기
28/36

아래는 처음 제출한 답안이다. 정확성 테스트의 5, 11, 17번과 효율성 테스트의 2번에서 실패했다.

def solution(s):
    if s[0] == ')' or s[-1] == '(':
        return False
    
    stack = []
    
    for i in range(len(s)):
        if s[i] == '(':
            stack.append('(')
        elif s[i] == ')':
            if stack[-1] == '(':
                stack.pop(-1)
            else:
                return False
    return True

stack.pop(-1)del stack[-1]로 변경해도 같은 결과를 얻는다.

그래서 다시 한 번 자세히 코드를 들여다 봤더니 for문을 돌면서 stack 리스트가 비어질 수 있고 그러면 stack[-1]을 가져올 수 없으며, stack[-1]이 '(' 외 다른 문자일 수 없다는 걸 깨달았다. 그리고 최종적으로 stack이 모두 비었는지 확인해야 한다.

def solution(s):
    if s[0] == ')' or s[-1] == '(':
        return False
    
    stack = []
    
    for i in range(len(s)):
        if s[i] == '(':
            stack.append('(')
        elif s[i] == ')':
            if len(stack) != 0:
                stack.pop()
            else:
                return False
    return len(stack) == 0

추가적으로 코드의 간결함을 원한다면 if len(stack) != 0if stack로 변경할 수 있을 것 같다.

쉬운 문제인데 내가 파이썬을 사용해 자료구조를 구성하는 데에 능숙치 않아서 틀린 것 같다.

profile
Hail hamster

0개의 댓글