본문 바로가기
Algorithm/코딩테스트 (Python)

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

by 싱브이 2023. 11. 28.
728x90
반응형

문제

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

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

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

 

 

 

 

내 생각

기본적인 생각은 이러하다. 스택을 이용하면 아주 간단한 문제! 

  1. 기본적으로 '( )' 라는 짝이 되어야 올바른 괄호이다.
  2. 스택에는 '(' 만 넣어두고 ')'이 들어올 때에만 삭제시킨다.
  3. 스택에 비어있는데 ')'가 들어온다면? → False를 반환한다.
  4. for문을 다 돌았는데 stack이 비어있지 않다면? → False를 반환한다.
  5. 모든 조건을 통과하면 True를 반환한다. 

 

 

 

내 코드

def solution(s):
    stack = []
    for c in s:
    	#현재 문자가 '('이면 스택에 추가
        if c == "(":
            stack.append(c)
        #현재 문자가 ')'일 경우
        else:
        	#스택이 비어 있지 않다면(스택 안에 '('가 존재함) -> 짝이 맞는다. 
            if stack:
            	#스택에서 제거
                stack.pop()
            #스택이 비어있는데 ')'가 나왔다면 -> 올바른 짝 아님
            else:
                return False
    #문자열을 모두 확인했는데 스택이 비어 있지 않다면? -> 올바르게 닫히지 않았음.
    if stack:
        return False
    return True

 

728x90
반응형

댓글