Lim Seunghyun Space

[백준 온라인 저지] 균형잡힌 세상 본문

Algorithm/문제

[백준 온라인 저지] 균형잡힌 세상

Lim Seung Hyun 2022. 11. 19. 22:16

문제 출처

 

4949번: 균형잡힌 세상

하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 각 줄은 마침표(".")로 끝난다

www.acmicpc.net

 

문제 해설

  • 문자열에 포함된 괄호의 열고 닫음이 짝이 잘 이루어져 균형이 잘 이루어져 있는지 확인하는 문제
  • 문제에서 사용된 괄호는 소괄호("()"), 대괄호("[]")
  • 균형이 잘 이뤄어져 있는지 판단하는 조건
    • 모든 여는 소괄호("(")는 닫는 소괄호(")")와만 짝을 이룬다.
    • 모든 여는 중괄호("[")는 닫는 중괄호("]")와만 짝을 이룬다.
    • 모든 닫는 괄호는 짝을 이루는 여는 괄호가 존재
    • 여는 괄호와 닫는 괄호는 1대1로 매칭
  • "." 마침표가 입력되면 프로그램 종료

 

문제 풀이

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

while True:
    line = input()

    if line == ".":
        break

    result = True
    stack = []
    for c in line:
        if c == "(" or c == "[":
            stack.append(c)
        elif c == ")" or c == "]":
            if len(stack) == 0:
                result = False
                break
            data = stack.pop(-1)
            if c == ")" and data != "(":
                result = False
                break
            elif c == "]" and data != "[":
                result = False
                break
    if len(stack) != 0:
        result = False

    print("yes" if result else "no")
  • 문자열의 문자를 하나씩 읽으면서 여는 괄호인 나오는 경우에는 스택에 저장하고 닫는 괄호가 나오는 경우에는 스택의 마지막 부분과 비교하여 짝을 이루는지 확인
  • 짝을 이루지 않는다면 균형이 맞지 않는 것으로 판단하여 반복 종료
  • 마지막으로, 스택이 비어있지 않는 경우에는 짝을 이루지 못한 여는 괄호가 존재하는 것이므로 균형이 맞지 않는 것으로 판단

 

Github

728x90

'Algorithm > 문제' 카테고리의 다른 글

[Leetcode] Binary Search  (0) 2022.11.23
[Leetcode] Reverse Integer  (0) 2022.11.21
[백준 온라인 저지] 벌집  (0) 2022.11.13
[백준 온라인 저지] 손익분기점  (2) 2022.11.13
[Leetcode] 4. Median of Two Sorted Arrays  (0) 2022.06.10