선릉역 1번 출구

baekjoon - 9012 본문

Algorithm/Algorithm 문제풀이

baekjoon - 9012

choideu 2021. 8. 28. 21:44
def push(vps):
    stack.append(vps)

def pop():
    if stack:
        stack.pop()
        return 0
    return -1

for _ in range(int(input())):
    stack = []
    a = input()
    k = 0
    for i in range(len(a)):
        if a[i] == '(':
            push('(')
        elif a[i] == ')':
            k += pop()
    if k != 0 or stack:
        print("NO")
    else:
        print("YES")

괄호를 열고 닫는 개수가 일치해야 이 문제가 풀린다. 그러나 주의할 점은 ()의 순서여야 한다는 것이다. )(는 안됨

그래서 생각한 것은

1. ()의 순서대로 (의 개수와 )의 개수가 일치할 때 => YES 출력

2. (의 개수가 )보다 많을 때 => stack에 (가 남아있기 때문에 stack을 if문의 조건으로 두어 NO 출력

3. )의 개수가 (보다 많을 때 => pop의 return문을 -1로 두고, 새로운 변수 k를 두어 += 함 그래서 0 이 아니면 )의 개수가 더 많은 것으로 판단함. NO 출력

처음에 k를 += 한게 아니고 그냥 =으로 두고 k가 -1이면 NO를 출력하게 했더니 "(()))()"라는 변수가 들어왔을 때 k의 값이 뒤에서 경신되어 YES로 출력되는 오류가 발생했다. 그래서 +=의 방식을 사용했다.

'Algorithm > Algorithm 문제풀이' 카테고리의 다른 글

baekjoon - 1406  (0) 2021.08.30
baekjoon - 1874  (0) 2021.08.28
baekjoon - 9093  (0) 2021.08.28
baekjoon - 10828  (0) 2021.08.28
baekjoon - 재귀  (0) 2021.08.21
Comments