[백준] 9012번(괄호)

·2023년 4월 29일

백준 문제풀이

목록 보기
55/159

백준 9012번


최종 제출 코드

import sys

def solution(input_array):

  stack = []
  for i in range(len(input_array)):
    if input_array[i]=='(':
      stack.append(input_array[i])
    else:
      if len(stack) > 0: #스택에 원소가 있음
        if stack[len(stack)-1] == '(': #직전 원소가 (임
          stack.pop()
        else:
          return "NO"
      else: #스택에 아무것도 안 들었음
        return "NO"

  if len(stack) > 0: return "NO" #문자열을 다 돌았는데도 스택에 원소가 남음
  return "YES"

input = sys.stdin.readline
T = int(input().rstrip())

for i in range(T):
  print(solution(input().rstrip()))

풀이

  1. 입력이 (일 경우 무조건 스택에 push
  2. 입력이 )일 경우
    1) 스택에 원소가 있음 & 스택의 top 원소가 (임 ⇒ pop
    2) 스택에 원소가 있음 & 스택의 top 원소가 (가 아님 ⇒ NO 리턴
    3) 스택에 원소가 없음 ⇒ NO 리턴
  3. 입력을 다 돌았는데 스택에 원소가 남음 ⇒ NO 리턴

수정 코드

import sys

def solution(input_array):

  stack = []
  for i in range(len(input_array)):
    if input_array[i]=='(':
      stack.append(input_array[i])
    else:
      if len(stack) > 0:
          stack.pop()
      else:
        return "NO"

  if len(stack) > 0: return "NO"
  return "YES"

input = sys.stdin.readline
T = int(input().rstrip())

for i in range(T):
  print(solution(input().rstrip()))

수정

  • 생각해보니 1. 1)과 2)를 나눌 필요가 없음
    ⇒ 스택에 원소가 있으면 그 원소는 무조건 (이기 때문임
    ❓ 애초에 )이면 원소에 push를 안함...
profile
백엔드 개발자가 되고 싶어요(22.8.15~)

0개의 댓글