용꿀
꼬마개발자허니
용꿀
전체 방문자
오늘
어제
  • 분류 전체보기 (247)
    • 개발 (74)
      • 스프링 입문 (7)
      • 스프링 기본 (9)
      • ToDo List using JPA (2)
      • 스프링 개념 (9)
      • 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 (8)
      • 스프링 MVC (3)
      • CS (18)
      • 개발 팁 (8)
      • 스프링 MSA (5)
      • 곰터뷰🐻 (5)
    • 알고리즘 (169)
      • 알고리즘 문제 풀이 (165)
    • 잡동사니 (1)
      • 노래 가사 (1)
hELLO · Designed By 정상우.
용꿀

꼬마개발자허니

(Python) 백준 4949번 - 균형잡힌 세상
알고리즘/알고리즘 문제 풀이

(Python) 백준 4949번 - 균형잡힌 세상

2023. 1. 5. 22:38

문제 링크 : https://www.acmicpc.net/problem/4949

 

4949번: 균형잡힌 세상

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

www.acmicpc.net

풀이

배열을 사용하여 '(', '[' 가 나타나면 배열에 저장한 후, 그에 맞는 짝이 나오면 배열에 저장되어 있던 값들을 pop 시키는 형식으로 문제 풀이를 진행했다.

import sys
from collections import deque

while True:
    s = sys.stdin.readline()
    if s == ".\n":  # "."이 입력되면 종료
        break
    arr = deque()  # (, [들을 담을 배열
    for i in range(len(s)):
        if s[i] in ('(', ')', '[', ']'):  # (, ), [, ]만 arr에 담도록 하기
            arr.append(s[i])
    dq = deque()  # 균형 잡힌 문자열인지 확인하기 위한 배열
    if len(arr) == 0:  # 아무 괄호들도 있지 않다면 균형 잡힌 문자열
        print("yes")
    # 짝이 맞는 괄호끼리 수가 같은 것은 균형 잡힌 문자열의 필요충분조건
    elif arr.count('(') == arr.count(')') and arr.count('[') == arr.count(']'):
        for i in arr:  # 괄호들을 순환하며 체크
            if i == '(' or i == '[':  # 왼쪽 괄호가 나타나면 arr에 저장
                dq.append(i)
            elif dq and i == ')':  # )가 나타나면
                if dq[-1] == '(':  # 가장 최근에 나타난 왼쪽 괄호가 (여야 균형 잡힌 문자열임
                    dq.pop()
                else:  # 그렇지 않다면 균형 잡힌 문자열이 아님
                    dq.append(".")
                    break
            elif dq and i == ']':  # ]가 나타나면
                if dq[-1] == '[':  # 가장 최근에 나타난 왼쪽 괄호가 [여야 균형 잡힌 문자열임
                    dq.pop()
                else:  # 그렇지 않다면 균형 잡힌 문자열이 아님
                    dq.append('.')
                    break
            else:  # 그 외의 경우는 균형 잡힌 문자열이 아님
                dq.append(".")
                break
        if len(dq) != 0:  # .가 들어가 배열이 비지 않았다면
            print("no")  # 균형 잡히지 않은 문자열
        else:  # 그렇지 않다면
            print("yes")  # 균형 잡힌 문자열
    else:  # 필요충분조건을 만족하지 않으므로
        print("no")  # 균형 잡히지 않은 문자열

 

'알고리즘 > 알고리즘 문제 풀이' 카테고리의 다른 글

(Python) 백준 10773번 - 제로  (0) 2023.01.09
(Python) 백준 9012번 - 괄호  (0) 2023.01.05
(Python) 백준 2839번 - 설탕 배달  (0) 2023.01.04
(Python) 백준 2164번 - 카드 2  (0) 2023.01.04
(Python) 백준 1920번 - 수 찾기  (0) 2023.01.02
    '알고리즘/알고리즘 문제 풀이' 카테고리의 다른 글
    • (Python) 백준 10773번 - 제로
    • (Python) 백준 9012번 - 괄호
    • (Python) 백준 2839번 - 설탕 배달
    • (Python) 백준 2164번 - 카드 2
    용꿀
    용꿀

    티스토리툴바