본문 바로가기
알고리즘/프로그래머스

프로그래머스 Lv2 올바른 괄호 (python)

by 개발하는 호랑이 2024. 1. 29.

올바른 괄호

풀이

문제 유형도 스택/큐 로 되어있었고, 문제를 푸는 방법도 스택이 편하기에 스택을 이용한 방법으로 풀었다.
1. stack을 만들어둠
2. 열린괄호 '('면 stack에 넣고, 닫힌 괄호 ')'면 stack에서 열린괄호'('를 빼는데, 이때 stack이 비어있으면 False 반환
3. 문자열을 끝까지 확인후 stack에 값이 남아있으면, 짝이 맞지 않는 경우이니, False를 반환
4. 이외의 상황은 True 반환

# ( 가 하나 있으면 )도 하나 있어야함. 
# 하지만 )( 는 안되고 () 순이어야함.
# 스택을 이용해보자
# 스택에는 ( 만을 넣고 반복문을 돌리면서 )게 나온다면, 에서 확인하기

def solution(s):
    stack = []
    for i in range(len(s)):
        # 열린 괄호면 스택에 넣기
        if s[i] == '(':
            stack.append(s[i])
        # 닫힌 괄호면 스택에서 빼기
        else:
            # 스택에 열린괄호가 없는데 닫힌괄호가 있으면 잘못된거니까 False 반환
            if len(stack) == 0:
                return False
            else:
                stack.pop()
    # 스택에 열린괄호가 남아있으면 짝이 안맞으니 False 반환
    if stack:
        return False
    return True

다른 사람 풀이

이 방법은 열린괄호면 +1, 닫힌 괄호면 -1을 하는 방식으로 결과가 0이 되는지를 이용했다.
대신 닫힌 괄호가 먼저나올 수 없으니 변수 wt가 0미만이면 바로 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