알고리즘/프로그래머스

[프로그래머스 / Python] 올바른 괄호 | 초코더

cloud_nice 2020. 8. 18. 15:52

 

def solution(s):
    stack=[]
    #s문자열의 원소들을 검사해봄
    for string in s:
        #stack이 비어있을 때 / 여는괄호가나오면추가, 닫는괄호가나오면 False
        if len(stack)==0:
            if string=='(':
                stack.append(string)
            else:
                return False
        #stack이 비어있지않을때 / 여는괄호가나오면추가, 닫는괄호가 나오면 pop
        elif string=='(':
            stack.append(string)
        elif string==')':
            stack.pop()
    #검사가 끝난후 stack이 비어있는면 짝이 잘맞는것
    if len(stack)==0:
        return True
    return False

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

 

코딩테스트 연습 - 올바른 괄호

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

programmers.co.kr

 

문제

괄호가 바르게 짝지어졌는지 검사하는 문제

stack을 이용해서 푸는 기본적이고 대표적인 괄호 문제입니다.

 

접근법

빈 리스트 stack에 문자열을 넣어가며 비교해줌

1. stack리스트가 비어있을경우

    1-1. 여는괄호를 만나면 stack에 그대로 추가.

    1-2. 닫는괄호를 만나면 짝이 맞지 않는 것이므로 False 출력.

2. stack리스트가 비어있지 않을경우

   1-1. 여는괄호를 만나면 stack에 그대로 추가.

   1-2. 닫는괄호를 만나면 stack에 들어있는 원소 pop().

3. 비교가 끝난후에 stack이 비어있으면 짝이 바르게 이루어 졌으므로 True,

   그렇지않으면 False 출력

 

전체코드

def solution(s):
    stack=[]
    #s문자열의 원소들을 검사해봄
    for string in s:
        #stack이 비어있을 때 / 여는괄호가나오면추가, 닫는괄호가나오면 False
        if len(stack)==0:
            if string=='(':
                stack.append(string)
            else:
                return False
        #stack이 비어있지않을때 / 여는괄호가나오면추가, 닫는괄호가 나오면 pop
        elif string=='(':
            stack.append(string)
        elif string==')':
            stack.pop()
    #검사가 끝난후 stack이 비어있는면 짝이 잘맞는것
    if len(stack)==0:
        return True
    return False