괄호 [ Python ] [ 백준 : 9012 ]

2023. 6. 1. 23:48알고리즘/백준


풀이 및 회고

 

오랜만에 괄호문제를 풀었는데 생각보다 손이 잘 나가지 않았다.

머리로는 알고있는데 구현이 잘 안되는 느낌을 많이 받았다. 

알고리즘 문제를 풀때 머리로 알고있는 느낌을 주석으로 더 많이 자세히 적으면서 풀어야겠다.

그리고 NO 를 출력해야되는데 No 를 출력문에 써놔서 여러번 틀렸다.. ㅠ

 

우선 문제는 괄호를 어떻게 검증할 것이냐는건데 스택을 활용해 검증을 한다.

빈 스택에 여는 괄호면 값을 넣고 닫는 괄호일 경우 여는 괄호를 제거해 주는데 만약 스택에 값이 없다면 NO 를 출력하고 종료한다.

최종적으로 루프가 끝난 후 스택에 값이 있으면 NO 를 출력하고 값이 없다면 YES 를 출력한다.

# 괄호

# 테스트를 몇 번 할지 입력받는다.
# 반복문을 선언해 괄호를 넣는다.
# 괄호를 저장할 리스트를 만든다.
# 괄호를 입력받는다.
# 괄호를 하나씩 돌기위해 반복문을 선언한다.
# 괄호를 리스트에 넣으며 검증한다.
# 검증 후 괄호가 저장된 리스트가 비어있으면 YES , 아니면 NO 를 출력한다.

T = int(input())

for i in range(T):
    insert = input() # 괄호를 입력받는다.
    stack = [] # 값을 넣어 확인할 스택 리스트
    for j in insert: # 괄호를 하나씩 반복하며 검증한다.
        if j == '(': # ( 인 경우 stack 에 넣는다.
            stack.append(j)
        elif j == ')': # ) 인 경우
            if stack: # stack 에 값이 있으면 pop
                stack.pop()
            else: # stack 에 값이 없으면 NO 를 출력하고 종료한다.
                print('NO')
                break
    else: # 반복문이 정상적으로 종료되었을때
        if stack: # 스택에 값이 있으면 NO 출력
            print('NO')
        else: # 스택에 값이 없으면 YES 출력
            print('YES')