Computer_Language/Algorithm

[백준] 4949번 균형잡힌 세상 파이썬 해설

Joo-Topia 2020. 1. 5. 12:00

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

 

입사 후 교육을 받는 기간이라 주말에 간간히 한 두 문제 정도 풀 수 있다..ㅜ

심지어 회사와 관련된 내용과 지식은 보안상 조심해야 한다고 하기 때문에 퇴사 전 까지는 알고리즘 문제 풀이 정도나 올릴 것 같다.

 

오늘은 오랜만에 알고리즘 문제를 풀었기 때문에 다소 쉬운 문제를 선택했다. 문자열을 다루는 문제이며 괄호 찾기와 매우 유사한 문제이기 때문에 자료구조 stack을 이용하면 쉽게 풀 수 있다.

 

풀이


문제를 정독하고 간단하게 알고리즘을 설계한 뒤 그대로 코드로 구현하였다.

1. 입력을 받는다.

2. 좌측 괄호('(', '[')인지 검사한다.
만약 좌측 괄호라면 스택에 넣어준다.

3. 우측 괄호인지(')', ']') 검사한다.
만약 우측 괄호라면 스택의 원소와 비교하여 괄호의 균형이 맞는지 검사한다.

4. 입력받은 문자열이 종료 문자 '.'라면 종료를, 아니라면 문제에서 원하는 출력을 수행한다

 

- 정답 코드 

import sys
input = sys.stdin.readline

while 1:
    string = input().rstrip()
    stack = []
    true_flag = 1
    for cha in string:
        if cha == '(' or cha == '[':
            stack.append(cha)
        elif cha == ')':
            if stack and stack[-1] == '(':
                stack.pop()
            else:
                true_flag = 0
                break
        elif cha == ']':
            if stack and stack[-1] == '[':
                stack.pop()
            else:
                true_flag = 0
                break
    if string == '.':
        break
    print("yes" if true_flag and not(stack) else "no")

 

결과


오랜만이라 그런지 또 사소한 실수 때문에 한 번만에 통과하지 못했다..ㅜ

매 주말마다 한 두 문제씩이라도 풀면서 프로그래밍에 대한 '감'을 유지하도록 해야겠다!