Coding Test/Baekjoon

[Python] 파이썬 백준(9012) 괄호

파송송 2023. 4. 4. 15:32
728x90

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

 

9012번: 괄호

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

www.acmicpc.net


나의 풀이

스택을 사용하는 문제로 괄호로 구성된 문자열이  바르게 되어있다면 YES, 아니라면 NO를 출력하는 문제이다.

6
(())())
(((()())()
(()())((()))
((()()(()))(((())))()
()()()()(()()())()
(()((())()(
NO
NO
YES
NO
YES
NO

  1. 우선 괄호를 하나씩 뽑아 ')'일 때는 check에 +1을 해주고 '('일 때는 -1을 해줌
  2. (일 때 check = 0 이라면 순서가 꼬여 들어간 것이기 때문에 반복문을 break 해주고 Check에 -1을 넣어 No를 출력함
import sys

cnt = int(sys.stdin.readline())

for _ in range(cnt):
    ps = list(sys.stdin.readline())[:-1]
    check = 0
    while ps :
        p = ps.pop()

        if p == '(' and check ==0 :
            check = -1
            break

        if p == ')':
            check += 1
        else:
            check -= 1

    if check == 0:
        print("YES")
    else:
        print("NO")


다른 사람의 풀이

나는 (일 때 check가 0이라면 괄호의 짝이 맞지 않다고 판단하였음

이 코드에서는 size(=check)가 0보다 작을 때 괄호의 짝이 맞지 않다고 판단함

import sys

N = int(input())

for i in range(N):
    line = sys.stdin.readline()
    size = 0
    is_vps = True
    for s in line:
        if s == '(':
            size += 1
        elif s == ')':
            size -= 1
            if size < 0: # 짝이 맞는 여는 괄호가 없는 경우
                is_vps = False
                break
    
    if size != 0:
        is_vps = False
    
    if is_vps:
        print('YES')
    else:
        print('NO')

728x90