[프로그래머스/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를 반환한다.
'코딩테스트 > 연습문제' 카테고리의 다른 글
[프로그래머스/Lv2] 피보나치 수 (0) | 2022.10.13 |
---|---|
[프로그래머스/Lv2] 숫자의 표현 (0) | 2022.10.12 |
[프로그래머스/Lv2] 최솟값 만들기 (0) | 2022.10.11 |
[프로그래머스/Lv2] JadenCase 문자열 만들기 (1) | 2022.10.07 |
[프로그래머스/Lv2] 최댓값과 최솟값 (0) | 2022.10.07 |