(스택) 균형잡힌 세상

2020. 2. 28. 23:22개발노트

이 문제의 저작권은 BAEKJOON에 있습니다.

 

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

문제는 위 링크에서 확인할 수 있습니다.

 

S_cnt = 0
while True:

    S = input()
    if S == '.':
        break
    temp = []
    err = 0
    S_size = len(S)
    for i in range(0, S_size - 1):
        if S[i] is '(' or S[i] is '[':
            temp.append(S[i])
        elif S[i] is ')' or S[i] is ']':
            try:
                if S[i] is ')' and temp[-1] is '(': 
                    temp.pop()
                elif S[i] is ']' and temp[-1] is '[':
                    temp.pop()
                else:
                    err = 1
                    break 
            except:
                err = 1
                break
    if len(temp) >= 1 or err == 1:
        print('no')
    else: 
        print('yes')
    S_cnt += 1

계속해서 한 줄씩 문자열이 주어지고 맨 마지막에 '.' (마침표)를 입력해야 끝나는 코드이기 때문에 while문을 사용했고

입력된 문자열이 '.' (마침표)이면 while문이 종료되도록 했습니다.

 

한 줄씩 문자열이 주어지기 때문에 주어진 문자열 끝까지 for문으로 돌며 '(' 이거나 '['이면 스택에 쌓아줍니다.

만약 ')' 이거나 ']'일 경우는 pop() 을 해주는데 이때 스택에 아무것도 존재하지 않으면

괄호 조건이 어긋나기 때문에 err = 1 을 해줍니다.

 

for문을 끝마치고 스택에 괄호가 남아있거나 err 가 1이면 'no'를 출력하고

그렇지 않으면 'yes'를 출력합니다.