백준 4949번: 균형잡힌 세상 - python

tomkitcount·2025년 4월 3일

매일 알고리즘

목록 보기
14/301

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

문제

온점 (".") 하나를 찍을 때까지 반복해서 문장을 받는데 괄호가 잘 열리고 닫겼는 지 파악해서 YES or NO를 출력하는 문제.

해결 방안

문자열을 받고 for 문을 돌아 ( 나 [ 를 만나면 리스트에 append 하고 )나 ] 를 만나면 (나 [ 가 있다면 pop 해준다. 만약 없다면 거기서 no를 바로 출력해버린다.

만약 for문을 다 돌았다면 리스트를 검사해서 비어있다면 yes,
괄호가 남아있다면 no 를 출력한다.

while(True):
    word=input()

    stack=[] # 괄호를 추가할 리스트 stack
    if word=='.': # . 이 들어오면 종료
        break

    for w in word:
        if w=='(' or w=='[': # 여는 괄호가 오면 stack에 추가
            stack.append(w)
        elif w==')': # ) 인 경우
            if stack and stack[-1]=='(': # stack이 비어있지 않고, 마지막 요소가 ( 이면 pop
                stack.pop()
            else: # stack이 비어있거나 짝이 맞지 않으면 stack에 )을 추가하고 break
                stack.append(w)
                break
        elif w==']': # ] 인 경우
            if stack and stack[-1]=='[': # stack이 비어있지 않고, 마지막 요소가 [ 이면 pop
                stack.pop()
            else: # stack이 비어있거나 짝이 맞지 않으면 stack에 ]을 추가하고 break
                stack.append(w)
                break

    if stack == []: # stack이 비어있으면 모든 괄호들의 균형이 맞으므로 Yes 출력
        print('yes')
    else: # stack이 비어있지 않으면 괄호들의 균형이 맞지 않는 것이므로 No 출력
        print('no')
profile
To make it count

0개의 댓글