Koala - 11기/코딩테스트 준비 스터디

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

ㄱㅈㅅㅇ 2023. 8. 14. 00:49

4949번: 균형잡힌 세상 (acmicpc.net)

 

4949번: 균형잡힌 세상

각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에

www.acmicpc.net

문제 풀이

단지 (,)와 [,]가 짝을 이루어 있는지만 확인하는 문제이다. 이는 스택을 이용하여 쉽게 풀 수 있다. 온점을 이용하여 입력을 알린다. EOF문제인걸로알고있는데 정확히 코드의 형식을 지켜야한다~ 이런형식이 있다~는 아직 모르겠어서 while문에 if종료조건 달아줬다. (,[는 리스트에 append해주고 ),]가 온다면 바로 전에 (,[가 있는지 확인한다. 있다면 잘하고있는것이므로 기존(,[를 삭제해주고 만약 아니라면 균형을 잃은것이니 일단 넣어두고 후에 이 리스트의 크기가 0이 아니라면 no를 출력한다. (이러한 생각으로 코드를 구현하다보면 빈리스트에 (가 있고없고 확인하다가 에러난다. 따라서 @과 같은 입력에 안들어가는 문자를 하나 넣어주고 마지막에 길이가 1이다 아니다를 기준으로 출력한다)

소스코드

while 1:
    a = list(input())
    b = ['@']
    if a[0] == '.': break
    i = 0
    while True:
        if a[i] == '.': break
        if a[i] == '[' or a[i] == '(':
            b.append(a[i])
        if a[i] == ']':
            if b[-1] == '[':
                b.pop()
            else:
                b.append(a[i])
        if a[i] == ')':
            if b[-1] == '(':
                b.pop()
            else:
                b.append(a[i])
        i += 1
    if len(b) == 1:
        print("yes")
    else:
        print("no")