자료구조&알고리즘/프로그래머스

[Python] 올바른 괄호 - 스택/큐

두잇 두두 2024. 2. 6. 21:44
728x90

 

 

 


문제

https://school.programmers.co.kr/learn/courses/30/lessons/12909

 

프로그래머스

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

programmers.co.kr

 

 

코드

 

def solution(s):
    cnt = 0
    for i in s:
        if i == "(":
            cnt +=1
        elif i == ")":
            if cnt < 1:
                return False
            cnt -=1
    if cnt == 0:
        return True
    else:
        return False

 

 

 

다른 사람 코드

 

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

 

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

 

접근법

스택 자료구조를 활용하는 문제로 괄호의 짝을 확인하는 방식으로 해결할 수 있습니다. 스택은 마지막에 열린 괄호가 처음으로 닫힌다는 Last In, First Out (LIFO) 원리를 사용합니다.

다른 사람 코드의 1 이 스택을 이용한 원리를 잘 사용한 코드입니다.

def solution(s):
    stack = []  # 스택을 사용할 리스트 생성
    
    for bracket in s:
        if bracket == "(":
            stack.append(bracket)  # 여는 괄호일 경우 스택에 추가
        else:
            if not stack:  # 스택이 비어있으면서 닫는 괄호가 나오면 올바르지 않은 괄호이므로 False 반환
                return False
            stack.pop()  # 스택에서 여는 괄호 제거
    
    return not stack  # 스택이 비어있으면 올바른 괄호, 비어있지 않으면 올바르지 않은 괄호

좀 더 활용한 코드입니다.

 

 

배운 점