개발 공부용

[백준] 4949 - 균형 잡힌 세상 본문

코딩 테스트/99클럽 TIL

[백준] 4949 - 균형 잡힌 세상

솝제로 2025. 2. 8. 06:42

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

문제
괄호들이 균형을 이뤘는지 확인.
괄호 종류는 ()와 []

균형을 이루는 조건은
- 모든 왼쪽 괄호는 오른쪽 괄호와 짝을 이루어야 함.
- 모든 괄호들이 1:1 매칭이 되어야 함.
- 짝을 이루는 두 괄호가 있을 때 그 사이의 문자열도 균형이 잡혀야 함.
- 괄호가 하나도 없는 경우도 균형 잡힌 문자열로 간주함.

 

입력
  • 각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호, 대괄호로 이루어짐.
  • 문자열은 100글자보다 작거나 같고 온점으로 끝남.
  • 입력의 종료 조건으로 맨 마지막에 온점 하나가 들어옴.

 

출력
  • 각 줄마다 문자열이 균형을 이루면 yes 아니면 no 출력

 

작성한 코드
import sys

while True:
    data = sys.stdin.readline()
    if data.replace("\n", "")==".":
        break

    stack = []

    for i in data:
        if (i=="[" or i=="("):
            stack.append(i)
        elif (i=="]"):
            if(len(stack)!=0 and stack[-1]=="["):
                stack.pop()
            else:
                stack.append(i)
                break
        elif (i==")"):
            if(len(stack)!=0 and stack[-1]=="("):
                stack.pop()
            else:
                stack.append(i)
                break
    
    if(len(stack)==0):
        print("yes")
    else:
        print("no")

 

 

"짝을 이루는 두 괄호가 있을 때, 그 사이에 있는 문자열도 균형이 잡혀야 한다."

이 조건을 제대로 이해하지 못해서 애먹었던 문제.

예를 들어 ( [ ) ( ] )와 같은 문자열이 위 조건에 위배된다.

( ) 안에 [ 이 균형을 이루지 못했기 때문이다.

 

참고 자료: https://velog.io/@kndh2914/99%ED%81%B4%EB%9F%BD-%EC%BD%94%ED%85%8C-%EC%8A%A4%ED%84%B0%EB%94%94-15%EC%9D%BC%EC%B0%A8-TIL-%EC%8A%A4%ED%83%9D%ED%81%90

'코딩 테스트 > 99클럽 TIL' 카테고리의 다른 글

[Leetcode] 506. Relative Ranks  (0) 2025.02.12
[프로그래머스] 힙 - 더 맵게  (0) 2025.02.11
[백준] 26043 - 식당 메뉴  (0) 2025.02.07
[백준] 10845 - 큐  (0) 2025.02.06
[백준] 17608 - 막대기  (0) 2025.02.05