백준 9012(괄호)

hhnn0·2022년 7월 16일
0

개요

링크

백준 9012번 : 괄호

입력 예시

입력 1

6
(())())
(((()())()
(()())((()))
((()()(()))(((())))()
()()()()(()()())()
(()((())()(

입력 2

3
((
))
())(()

출력 예시

출력 1

NO
NO
YES
NO
YES
NO

출력 2

NO
NO
NO

접근 방식

문자열을 index로 접근하는 방식으로 문제를 해결하려고 한다.
항상 (가 먼저 나와야 하고,
(의 개수가 ) 이상이 되도록 유지를 해야한다.

따라서 )가 먼저나오거나, 개수가 (보다 많아지는 경우에는 바로 NO를 출력해주고,
모든 문자열을 탐색하였을 때 (의 개수와 )의 개수가 일치해야 한다.

풀이

isValid라는 함수를 정의하여,
각 문자열의 index를 탐색한다.
(의 경우 total값을 1 증가시켜주고,
)의 경우 total값을 1 감소시켜줌으로써 ()의 개수를 파악한다.

isValid()

def isValid(str) :
    length = len(str)
    total = 0
    for i in range(length) :
        if total < 0 :
            print("NO")
            return -1
        
        if str[i] == '(' :
            total += 1
        else :
            total -= 1
    if total == 0 :
        print("YES")
        return 0
    else :
        print("NO")
        return -1

main()

T = int(input())
for i in range(T) :
    isValid(input())

결과

0개의 댓글