코딩 테스트/프로그래머스

[Python] 프로그래머스 lv.2 올바른 괄호

위시리 2024. 10. 15. 21:43

알고리즘 고득점 kit - 스택/큐 - lv 2

 

문제 분석

  • 올바른 괄호 '('로 열렸으면 ')'로 닫혀야 한다.
  • 올바른 괄호면 true
  • 올바르지 않으면 false return

 

코드 설계

  • 문자열을 한글자씩 입력
  • 만약 '('가 있다면 stack.append
  • ')'가 있다면
  • 만약 stack이 비어있지 않고 [-1] ==  '('라면 pop
  • else stack.append
  • 문자열을 다 훑었는데 stack이 비어있다면 true
  • 비어있지 않다면 false

 

정답 코드

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

    return answer

 

2회차 - 2024.11.26

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

    return True

 

3회차 - 2025.03.27

해설 코드

def solution(s):
    answer = True
    stk = []
    
    for i in s:
        if i == '(': # 열면 넣고
            stk.append('(')
        else:
            if stk: # 비어 있는 리스트면 False
                stk.pop() # 있으면 하나 삭제
            else: #없으면
                return False
    
    return stk == []

 

내코드

def solution(s):
    answer = True
    stack = []
    
    for g in s :
        if g == "(" :
            stack.append("(")
        else : 
            if len(stack)>0 and stack[-1] == "(" :
                stack.pop()
            else :
                stack.append(g)
                
    if len(stack) > 0 :
        answer = False
    
    return answer