[PYTHON] 9012 괄호

    https://www.acmicpc.net/problem/9012

     

    9012번: 괄호

    괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

    www.acmicpc.net

    문제 풀이

    • stack을 이용하여 문제를 풀었다.
    • 스택 안에 괄호를 하나씩 넣어 준다.
    • 만약 가장 최신으로 들어간 데이터가 '('이고 들어갈 데이터가 ')'라면 스택의 최신으로 들어간 데이터 '('을 제거한다.

    solution - 성공

    import sys
    T = int(sys.stdin.readline().strip())
    for _ in range(T):
      data = sys.stdin.readline().strip()
      stack = []
    
      for bracket in data:
        if len(stack) == 0 :
          stack.append(bracket) 
        elif stack[-1] == '(' and bracket == ')':
          stack.pop()
        else:
          stack.append(bracket) 
    
      if len(stack) == 0:
        print('YES')
      else:
        print('NO')
    • 만약 '))((' 문자열이 들어온다면
    • 처음에 ')' 닫힌 괄호부터 들어오면 더 이상 코드를 진행하지 않고 무조건 NO 라고 판단되지만
    • 위 코드는 모든 과정을 끝까지 실행해야 틀렸다고 판단할 수 있다.

    solution - 최종 코드 성공

    import sys
    T = int(sys.stdin.readline().strip())
    for _ in range(T):
      data = sys.stdin.readline().strip()
      stack = []
    
      for bracket in data:
        if bracket == '(':
          stack.append(bracket)
        elif bracket == ')':
            if stack: # 빈 문자열이 아니면 True
              stack.pop()
            else: # ')'이 빈 문자열에 들어오면 바로 'No'를 출력하고 실행을 종료함.
              print('NO')
              break
      
      if len(stack) == 0:
        print('YES')
      else:
        print('NO')

    'algorithm > 백준' 카테고리의 다른 글

    [PYTHON] 10773 제로  (0) 2023.01.30
    [PYTHON] 10101 삼각형 외우기  (0) 2023.01.30
    [PYTHON] 2720 세탁소 사장 동혁  (0) 2023.01.30
    [PYTHON] 2161 카드1  (0) 2023.01.30
    [PYTHON] 1453 피시방 알바 - set으로 중복제거/스택  (0) 2023.01.30

    댓글