[알고리즘] 백준 9012 : 괄호 - S4

eternal moment·2023년 4월 18일
0

2023.04.18 풀이

import sys
input=sys.stdin.readline

t=int(input())

for j in range(t):
    res=0
    s=input().rstrip()
    for i in range(len(s)):
        if s[i]=="(":
            res+=1
        else:
            if res>0:
                res-=1
            else:
                print('NO')
                break
        if i==len(s)-1 and res==0:
            print("YES")
        elif i==len(s)-1:
            print("NO")

  • 스택은 스택인데 실제로 push, pop을 하지않고 덧셈으로 계산
  • yes, no의 조건문 헷갈렸음

2023.05.09 풀이

import sys
input=sys.stdin.readline

n=int(input())

for _ in range(n):
    s=list(map(str, input().rstrip()))
    k=0
    for i in s:
        if i=="(":
            k+=1
        else:
            if k>=1:
                k-=1
            else:
                k=1
                break
    
    if k==0:
        print('YES')
    else:
        print("NO")

다른 풀이

  • 문자열 구현 풀이
T = int(input())
for i in range(T):
    s = input()
    while '()' in s:
        s = s.replace('()',"")
    if s == '':
        print('YES')
    else:
        print('NO')

  • for 문 다 돌고 난 뒤에 res 값으로 판별해도 가능.
T = int(input())

for i in range(T):
    data = input()
    s = list(data)
    sum = 0
    for i in s:
        if i == '(':
            sum += 1
        elif i == ')':
            sum -= 1
        if sum < 0:
            print('NO')
            break
        
    if sum > 0:
        print('NO')
    elif sum == 0:
        print('YES')

T = int(input())

for i in range(T):
    stack = []
    a=input()
    for j in a:
        if j == '(':
            stack.append(j)
        elif j == ')':
            if stack:
                stack.pop()
            else: # 스택에 괄호가 없을경우 NO
                print("NO")
                break
    else: # break문으로 끊기지 않고 수행됬을경우 수행한다
        if not stack: # break문으로 안끊기고 스택이 비어있다면 괄호가 다 맞는거다.
            print("YES")
        else: # break안 걸렸더라도 스택에 괄호가 들어있다면 NO이다.
            print("NO")

check point

  • 다른 풀이-1에서처럼 문자열 구현 방법도 생각해보기
  • 다른 풀이-2에서 처럼 for문을 다 돈 이후에 따져도 상관없음

0개의 댓글