반응형
문제 설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다.
")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한 사항
문자열 s의 길이 : 100,000 이하의 자연수
문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
입출력 예
s | answer |
"()()" | true |
"(())()" | true |
")()(" | false |
"(()(" | false |
코드 및 설명
def solution(s):
l_bracket = 0
r_bracket = 0
for idx in range(len(s)):
if s[idx] == '(':
l_bracket += 1
else:
if l_bracket >= 1:
l_bracket -= 1
else:
r_bracket += 1
return True if l_bracket == 0 and r_bracket == 0 else False
'(' 문자로 열렸으면 반드시 짝지어서 ')' 이 부분이 핵심이다. ( 열렸으면 무조건 ) 닫히는 괄호가 와야 마무리 된다는 거다. 위 코드는 left 괄호와 right 괄호를 카운트하여, 나올때마다 1씩 숫자를 카운트해주고, left 카운터가 1이상일 상태에서 right 괄호가 나오면 -1해준다. 둘의 카운트 값이 0이면 True 하나라도 0이 아니면 False를 리턴한다.
def solution(s):
s_arr = []
for idx in range(len(s)):
if s[idx] == '(':
s_arr.append('(')
else:
if idx == 0:
return False
else:
if len(s_arr) >= 1:
s_arr.pop()
return True if len(s_arr) == 0 else False
이 문제는 스택/큐 관련 문제이다. 배열에 넣고 빼는 행위로 스택 큐 형태를 구현해보았다. for문을 돌면서 ( 나오면 배열 안에 넣고 ) 나오면 배열에서 뺀다. 여기서 idx == 0은 애초에 ) 괄호가 나온 건 절대 ()모양을 만들 수 없기 때문에 False를 바로 리턴하게 해놓았다. 배열안에 아무 값도 없다면, True이다.
반응형
'삽집하는 개발들 > 알고리즘' 카테고리의 다른 글
[53일차][Lv2][프로그래머스][12924]숫자의 표현 (8) | 2023.09.07 |
---|---|
[52일차][Lv2][프로그래머스][월간 코드 챌린지 시즌1][70129]이진 변환 반복하기 (0) | 2023.09.05 |
[51일차][Lv2][프로그래머스][12941]최솟값 만들기 (2) | 2023.09.04 |
[50일차][Lv2][프로그래머스][12951]JadenCase 문자열 만들기 (2) | 2023.09.03 |
[49일차][Lv2][프로그래머스][12939]최댓값과 최솟값 (4) | 2023.08.29 |