[코테] 스택 - 올바른 괄호(문자열 문제)

Bpius·2023년 5월 6일
0

알고리즘 문제풀이

목록 보기
1/28
post-thumbnail

출처: 프로그레머스 - 올바른괄호

문제:

괄호가 주어질 때, 올바른 괄호면 'True'를 아니면 'False'를 반환하는 함수 작성.
입력 예:
s - answer
"()()" - true
"(())()" - true
")()(" - false
"(()(" - false

풀이:

stack 자료구조 사용

  1. 여는 괄호 '('와 닫는 괄호 ')'가 짝이 맞아야 한다.
  2. 닫는 괄호 ')'가 먼저 나와선 안된다. 즉 '('여는 괄호가 먼저 나와야 한다.
  3. 여는 괄호 '('가 나왔을 때 여는 괄호를 '(' stack에 넣어주고
    닫는 괄호가 ')'가 나왔을 때 stack에 있는 여는 괄호를 '(' 빼낸다.
  4. ')' 가 나왔는데 stack에 '('가 없다면, ')'가 먼저 나온 경우이므로 False
  5. 모든 괄호를 다 확인했을 때 stack에 '(' 남아있다면 짝이 맞지 않는 경우이므로 False,
    비어있다면 짝이 맞았으므로 True

코드:

def solution(s):
    stack = []
    for i in s:
        if i == '(': # 여는 괄호가 나왔을 때
            stack.append(i)
        else: # 닫는 괄호가 나왔을 때
            if len(stack) == 0: # 스택이 비어있으면 짝이 맞지 않음으로 False
                return False
            else:
                stack.pop() # 스택에서 여는 괄호를 빼낸다
    # 모든 괄호를 확인한 후, 
    if len(stack) == 0: #짝이 맞은 경우
        return True
    else: # 짝이 틀린 경우
        return False
profile
데이터 굽는 타자기

0개의 댓글