균형잡힌 세상

bird.j·2021년 3월 10일
0

백준

목록 보기
53/76

백준 4949


방법1. stack을 이용해서 삽입하고, pop한 후 비교하고 이 결과를 기록하기 위해 flag를 설정한다.



while(True):
    words = input()
    if words == '.':
        break

    flag = 0
    stack = []
    for word in words:
        if word == '(' or word == '[':
            stack.append(word)

        if (word == ')'and len(stack)==0) or (word == ')'and stack.pop()!='(') or (word == ']'and len(stack)==0) or (word == ']'and stack.pop()!='['):
            flag += 1
        
            
    if len(stack)!=0:
        flag += 1
        
    if flag == 0:
        print("yes")
    else :
        print("no")

입력 종료 조건이 '.'이므로 반복문 안에서 문자열을 입력받고 만약 입력값이 '.'이면 반복문을 종료한다.
no 혹은 yes를 출력하기 위한 깃발을 세워준다.
처음 flag의 값은 0인데 짝이 맞는 조건에 부합하지 않으면 flag에 카운트를 해준다.
마지막에 flag가 처음과 같이 0이면 걸리는 조건이 없었다는 뜻이므로 yes를 출력하고 flag값이 0이 아닌 다른 수라면 no를 출력한다.
=> 안되는 조건들을 생각하고 이를 코드로 구현한다.

조건은
1. '('나 '[' 를 만났을 때는 stack에 삽입하고, ')'나 ']' 를 만났을 때는 stack에서 pop한다. 이 때 스택이 비어있거나 pop한 원소가 각각의 짝이 아니면 flag를 높인다.
2. 만난 ')', ']' 만큼 pop을 했는데 stack에 '('또는 '['가 하나라도 남아있다면 flag값을 높인다.

0개의 댓글