알고리즘 공부(C++)

9012 괄호

혀니리리 2022. 8. 16. 14:36
728x90

문자열 문제

9012번: 괄호 (acmicpc.net)

 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net

T = int(input())
stack = []
answer = []
state = 1
lst = [[] for _ in range(T)]
for i in range(T):
    str = input()
    lst[i] = list(str)
for i in range(T):
    state = 1
    stack = []
    for j in range(len(lst[i])):
        if lst[i][j] == '(':
            stack.append(1)
        elif lst[i][j] == ')':
            if len(stack) == 0:
                state = 0
                break
            stack.pop()
    if len(stack) == 0 and state == 1:
        answer.insert(i,'YES')
    else:
        answer.insert(i,'NO')
for i in range(len(answer)):
    print(answer[i])

(()) 같은 괄호형식을 만족하는지 묻는 문제였는데...

문제 유형이 stack으로 구분되어있어서

아! push pop을 하다가 pop할 것이 없거나 남았을 때 NO로 출력, 나머지는 YES로 출력하면 되는구나! 깨달았다.

열심히 이중 리스트도 만들고

append, len, pop, insert등을 통해서 해당하는 스택과 리스트에 값을 넣고 빼는 것을 구현하는듯 했다..

답은 맞았으나!

스택이라는 개념만 적용하면 되고 그냥 정수로 하는것이 더 편하다는 것을 깨달았다.

new = 0

for _ in range(N):
    VPS = input()
    new = 0
    li = list(map(str,str(VPS)))
    for i in li:
        if i == '(':
            new+=1
        elif i == ')':
            new -=1

        if new < 0:
            break
    if new != 0:
        print("NO")
    else:
        print("YES")

like this...

더욱 쉬운 방법이 뭐가 있나 이런식으로 생각해 보자.

728x90

'알고리즘 공부(C++)' 카테고리의 다른 글

10845 큐  (0) 2022.08.16
1929 소수 구하기  (0) 2022.08.16
17478 재귀함수가 뭔가요?  (0) 2022.08.14
1026 보물  (0) 2022.08.13
1476 날짜 계산  (0) 2022.08.12