라떼는말이야

[프로그래머스 lv2] 올바른 괄호 본문

알고리즘/코딩 테스트

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

MangBaam 2021. 8. 11. 04:00
반응형


문제 설명

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

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

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

제한사항

  • 문자열 s의 길이 : 100,000 이하의 자연수
  • 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.

입출력 예

입출력 예

입출력 예 설명

입출력 예 #1,2,3,4
문제의 예시와 같습니다.

 


나의 풀이

def solution(s):
    answer = True
    stack = []
    for b in s:
        if b == '(':
            stack.append(b)
        elif len(stack) and b == ')':
            stack.pop()
        else:
            return False

    return False if len(stack) else True

괄호 문제는 스택을 활용하는 가장 대표적인 문제 중 하나이다.

원리는 '(' 를 만나면 스택에 집어넣고, ')' 를 만나면 스택에서 '(' 하나를 꺼낸다. 만약 스택이 비어있는 상태라면 올바른 괄호가 아니다. 예를 들어 '(()))' 이런 경우.

모든 작업이 끝나고 스택이 비어있다면 짝이 완벽히 맞는 올바른 괄호이고, 스택이 비어있지 않다면 '(' 가 더 많은 올바르지 않은 괄호인 것이다.

이 문제에서는 s에 '('와 ')'만 들어있기 때문에 단순히 pop을 하면 되지만 만약 숫자나 문자, 연산자 등이 섞여 있었다면 stack[-1] 로 가장 마지막에 들어있는 값이 '('인지 확인하는 루틴이 필요할 것이다.

반응형
Comments