알고리즘

[백준(BOJ)] 9012번 괄호

욘아리 2024. 1. 6. 21:14

문제

예시

Example 1:

Input : 6
	(())())
	(((()())()
	(()())((()))
	((()()(()))(((())))()
	()()()()(()()())()
	(()((())()(
Output : NO
	NO
	YES
	NO
	YES
	NO

 

Example 2:

Input : 3
	((
	))
	())(()
Output : NO
	NO
	NO

풀이

t = int(input())

for _ in range(t):
    str = input()
    check = 0 # YES 0 / NO 1
    myStack = []

    for i in range(len(str)):
        if str[i] == '(':
            myStack.append(str[i])
        else:
            if len(myStack) == 0:
                check = 1
                break
            else:
                myStack.pop()
    
    if check == 1 or len(myStack) != 0:
        print("NO")
    else:
        print("YES")

 

- 올바른 괄호 문자열인지 판단하기 위해 스택을 활용하여 확인한다.

- 괄호를 저장하기 위한 스택을 생성하고, '(' 여는 괄호인 경우 스택에 추가한다.

- 닫는 괄호인 경우 스택이 비어있으면 대응되는 여는 괄호가 없으므로 NO에 해당하는 1을 설정하고, 여는 괄호가 있다면 스택에서 제거한다.

- 반복문이 종료된 후 check가 1이거나 스택에 괄호가 남아있다면 NO를 출력하고, 그렇지 않으면 YES를 출력한다.