본문 바로가기

알고리즘/백준

[백준] 9012번 : 괄호

728x90

9012번: 괄호

해당문제는 스택이라는 자료구조를 활용하여 문제를 해결 할 수 있습니다.

괄호는 반드시 “(”와 “)” 쌍으로 이루어 져야 합니다. 이를 바탕으로 문제를 해결 할 수 있습니다.

  1. 문자열이 주어졌을때 “(”가 나온다면 스택에 넣습니다.
  2. “)”가 나온다면 이전에 스택에 “(”인지 확인합니다.
    1. “(” 가 아니라면 괄호는 성립될 수 없습니다.
    2. “)”가 나온다면 “)”를 스택을 꺼낸뒤 이어갑니다.
  3. 모든 문자열을 순회한뒤 스택이 비어있지 않다면 “(”뒤에 “)”가 나와야하는데 나오지 않았음으로 쌍이 맞지 않습니다.
T = int(input())
for _ in range(T):
    char = input()
    stack = []
    flag = True

    for i in range(len(char)):
        if char[i] == '(':
            stack.append('(')
        else:
            if stack:
                if stack[-1] == ')': # ') )' 가 연속으로 나온경우
                    flag = False
                    break

                t = stack.pop() # 짝을꺼낸다.
            else: # ')' 가 먼저 들어온경우
                flag = False
                break

    if stack: # 짝을 맞추어 다 꺼내지도 못했을 경우
        flag = False

    if flag:
        print("YES")
    else:
        print("NO")
728x90

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 15685번 : 드래곤 커브  (0) 2023.10.18
[백준] 14718번 : 빗물  (1) 2023.10.18
[백준] 20040번 : Cycle Game  (0) 2023.10.18
[백준] 10775번 : 공항  (1) 2023.10.18
[백준] 1189번 : 컴백홈  (0) 2023.10.18