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

2022. 10. 12. 10:22

문제

'(' 또는 ')' 으로만 이루어진 문자열 s가 올바른 괄호인지 판단하는 함수를 만들어야한다.

올바른 괄호란, '('로 열렸으면 ')'으로 닫혀야한다는 뜻이다.

 

 

제한조건

1. 문자열 s의 길이 : 100000이하의 자연수

2. 문자열 s는 '(' 또는 ')'로만 이루어져 있다.

 

 

코드

def solution(s):
    if s[0] == ')':
        return False
    
    stack = []
    for parenthesis in s:
        if parenthesis == '(':
            stack.append(parenthesis)
        else:
            if len(stack) == 0:
                return False
            else:
                stack.pop()

    if len(stack) == 0:
        return True
    else:
        return False

 

 

설명

if s[0] == ')':
	return False

문자열 s의 시작이 ')'이면 이미 정상적인 괄호가 아니기 때문에 False를 반환해준다.

 

stack = []
for parenthesis in s:
	if parenthesis == '(':
		stack.append(parenthesis)
	else:
		if len(stack) == 0:
			return False
		else:
			stack.pop()

정상적인 괄호임을 판단하기 위해 스택을 활용할 것이다.

'('을 만나면 스택에 넣고, ')'을 만나면 스택에 있는 '('을 빼낸다.

스택에 '('이 없는 상태에서 ')'을 만나면 정상적이지 않은 괄호로 판단한다.

그렇게 반복해서 스택에 들어있는 것이 아무것도 없다면(스택의 길이가 0) 정상적인 괄호로 판단하고

그렇지 않으면 정상적이지 않은 괄호로 판단한다.

 

코드 설명은 다음과 같다.

문자열 s에서 '('을 만나면 stack에 채워넣는다.

')'을 만나면 조건에 따라 두가지로 분기한다.

 

stack에 아무것도 들어있지 않다면 False를 반환한다.

stack에 무언가 들어있다면 가장 마지막 원소를 pop해준다.

 

if len(stack) == 0:
	return True
else:
	return False

stack의 길이가 0이면 True를 반환한다.

그렇지 않다면 False를 반환한다.

BELATED ARTICLES

more