백준_9012

임정민·2023년 7월 15일
1

알고리즘 문제풀이

목록 보기
76/173
post-thumbnail

백준 스택 문제입니다.

문제

https://www.acmicpc.net/problem/9012

[나의 풀이]

T = int(input())

stacks = []
for i in range(T):
    stacks.append(list(input()))

for stack in stacks:
    tmp = 0
    is_No = False

    while stack:

        v = stack.pop()
        if v == ')':
            tmp += 1
        else:
            tmp -= 1

        if tmp < 0:
            is_No = True
            break

    if tmp != 0:
        print("NO")
    elif is_No:
        print("NO")
    elif tmp == 0:
        print("YES")

올바른 다중(or 단일) 괄호 '()' 표기 문자열을 판별하는 문제입니다. 각 문자열을 stack구조에 넣어 ')'를 pop()했을 때 +1, '('을 pop()했을 때는 -1로 연산하여 도합 0이 되면 "YES"를 출력하게 하였습니다.🦝🦝🦝

단, tmp가 음수일 시에는 '('가 과도히 많은 경우이므로 "No"로 출력해주는 방식으로 해결하였습니다.

[다른 사람의 풀이]

n = int(input())

for _ in range(n):
    line = input()
    stack = []

    for i in line:
        if i == '(':
            stack.append('(')
        elif i == ')':
            if len(stack) == 0:
                stack.append(')')
                break
            else:
                stack.pop()

    if len(stack) != 0:
        print('NO')
    else:
        print('YES')

다른 사람의 풀이로는 주어진 문자열을 순차적으로 돌며 '('일 때는 stack이라는 리스트에 append해주고 ')'일때는 pop하여 길이가 0일때 "YES"를 출력하는 방식이었습니다. 여기서 '('가 등장하기 전에 ')'가 나올때는 잘못된 괄호표기이므로 break하고 "NO"를 출력하는 구조로 저의 풀이와 유사하였습니다.

감사합니다.🐣🐣🐣

profile
https://github.com/min731

0개의 댓글