Algorithm Study/Python

[백준 파이썬] # 9012 괄호

728x90
반응형

Silver IV

# 9012 괄호

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

 

9012번: 괄호

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

www.acmicpc.net

 

풀이

T = int(input())

for i in range(T):
    text = input()
    cnt = 0

    for i in text:
        if i == '(':
            cnt += 1
        else:
            cnt -= 1

        if cnt < 0:
            print('NO')
            break

    if cnt > 0:
        print('NO')
    elif cnt == 0:
        print('YES')

 

후기

  • 꽤 오랫동안 시도와 실패를 반복했는데 결국 풀어냈다.
  • 입력값의 왼쪽에서 오른쪽으로 for문을 통해 탐색한다. 여는 괄호(' ( ')가 있을 때 cnt + 1을, 닫는 괄호(' ) ')가 있을 때 cnt - 1을 해주었다. for문을 통해 탐색하는 동안 cnt가 음수가 될 경우 여는 괄호 없이 닫는 괄호가 입력 된 것이기 때문에 'NO'를 출력하고 탐색을 break 했다.
  • 탐색과정이 끝난 후에 YES/NO 판별을 다시 진행했다. cnt > 0 일 경우 여는 괄호가 필요 이상으로 입력된 것이고, cnt < 0 일 경우 닫는 괄호가 필요 이상으로 많은 것이다. 그러나 cnt < 0 일 경우는 이미 앞서 진행한 탐색과정에서 걸러지기 때문에 따로 조건을 세우지 않았다.
  • cnt == 0은 이상적인 경우로 여는 괄호와 닫는 괄호가 동일한 수 만큼 존재하며, 괄호의 규칙을 무너뜨리지 않는다. 따라서 'YES'를 출력하도록 한다.