🧩 Programming Languages/Python CodingTest

백준 9012번(silver 4) : 괄호 (replace)

복숭아아이스티에샷추가 2024. 2. 4. 17:00

 

 

9012번: 괄호

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

www.acmicpc.net


 

 내가 작성한 코드 (60ms) 

import sys
input = sys.stdin.readline

t = int(input())

for _ in range(t):
    string = input().rstrip()
    stack = []
    for i in range(len(string)):
        if string[i] == '(':
            stack.append('(')
        else: # ')' 입력받았는데
            if not len(stack) == 0: # 앞서 '(' 를 입력했었다면
                stack.pop() # 삭제
            else: # 앞서 '('를 입력하지 않았다면
                stack.append(')') # 일단 ')' 입력 -> 마지막 if 문 조건 맞추기위해
                break
    if not len(stack) == 0:
        print("NO")
    else:
        print("YES")

 

처음에 stack이 비어있는 상황에서  ')'가 입력되었다면, "NO"를 출력한 후, break 하려고 했는데

그러면 for문을 나오고 마지막 if 문에서 'stack 이 비어있다' 는 조건에도 부합하여 "YES" 를 출력하게 되었다.

 

그래서 어떻게 코드를 수정해야할까 고민하다가 그냥 ')'를 추가하는걸로 코드를 작성하였고, 성공하였다.

풀긴풀었지만 나 스스로도 만족스럽지 않아서 풀이를 찾아보았다.

 

 

 수정한 코드 (44ms) 

import sys
input = sys.stdin.readline

for _ in range(int(input())):
    string = input().strip()
    while '()' in string:
        # str.replace(a,b) = 문자열 str 속 a를 b로 바꾼다.
        string = string.replace('()', '')
    print("NO" if string else "YES")