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

Narcoker·2023년 7월 8일
0

코딩테스트

목록 보기
115/150

문제

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

풀이

스택을 활용한 풀이

([ 면 스택에 넣는다.

) 일 경우
스택이 비어있고 맨 마지막 값이 ( 이 아니면 올바른 문자열 이 아니므로
"no" 를 반환한다.

] 일 경우
스택이 비어있고 맨 마지막 값이 [ 이 아니면 올바른 문자열 이 아니므로
"no" 를 반환한다.

반복문을 끝나고 나서라도 스택에 값이 존재할 수도 있다.
Ex) ([[(

따라서 스택이 비어있는 경우만 "yes", 아니면 "no" 를 반환한다.

import sys

data = sys.stdin.read()

def check(line):
    stack = []
    for char in line:
        if char == "(" or char == "[":
            stack.append(char)
        elif char == ")":
            if not stack or stack[-1] != "(":
                return "no"
            stack.pop()
        elif char == "]":
            if not stack or stack[-1] != "[":
                return "no"
            stack.pop()

    return "yes" if not stack else "no"


def solution(data):
    data_lines = data.rstrip().split("\n")
    for i in range(len(data_lines) - 1):
        print(check(data_lines[i]))
    return

solution(data)

회고

처음 solution에서 한줄씩 받아오는 코드를 다음과 같이 작성했다.
data_lines = data.split("\n")

이거 때문에 계속 틀렸다고 나왔었다.

strip() 을 반드시 사용하자..

profile
열정, 끈기, 집념의 Frontend Developer

0개의 댓글