Koala - 15기/기초 알고리즘 스터디

[백준/Python] 4949번 : 균형잡힌 세상

rlawjdgns02 2024. 7. 28. 16:53

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

4949번 : 균형잡힌 세상

문제 풀이

1. while문을 사용하여 '.' 이 나올 때까지 입력받기

2. 한 문장 안에서 ([ 가 나올 경우 스택에 추가하기

3. )] 가 나올 경우

3-1. 스택이 비어있지 않은 경우

- 괄호가 ) (   /   ][ 라면 (짝이 맞다면) 스택에서 pop()하여 요소 제거

- 맞지 않다면 제대로 되어있지 않는 괄호 상태 -> flag = False, break로 탈출

3-2. 스택이 비어있는 경우

- 닫혀있는 괄호 앞에 짝이 맞는 요소가 없음을 의미 -> flag = False, break로 탈출

4. 위 조건에서 정상적으로 수행되고(flag가 True) 이고 스택이 비어있다면(괄호들이 전부 짝에 맞게 제거) yes 출력

그렇지 않다면 no 출력

 

문제 코드

while True:
    stack = []
    flag = True
    s = input()
    if s == '.':    break
    for i in range(len(s)):
        if s[i] == '(' or s[i] == '[':
            stack.append(s[i])
        elif s[i] == ')' or s[i] == ']':
            if len(stack) != 0:
                if (s[i] == ')' and stack[-1] == '(') or (s[i] == ']' and stack[-1] == '['):
                    stack.pop()
                else:
                    flag = False
                    break
            else:
                flag = False
                break
                
    if flag and len(stack) == 0:
        print('yes')
    else:
        print('no')