본문 바로가기
IT/알고리즘

백준 - 4949번

by Sungjun_ 2020. 11. 9.

문제

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

 

4949번: 균형잡힌 세상

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

www.acmicpc.net

 


코드

import sys

class Stack:

    def __init__(self):
        self.stk = []

    def append(self, value):
        self.stk.append(value)

    def pop(self):
        return self.stk.pop()

    def peek(self):
        if len(self.stk) <= 0:
            return -1
        return self.stk[-1]

    def size(self):
        return len(self.stk)

while True:
    ss = Stack()
    cnt = 0
    string = sys.stdin.readline().rstrip()
    if string == '.':
        break

    for i in string:
        if i == '(' or i == '[':
            ss.append(i)

        elif i == ']':
            if ss.peek() == '[':
                ss.pop()
            else:
                cnt += 1

        elif i == ')':
            if ss.peek() == '(':
                ss.pop()
            else:
                cnt += 1

    if ss.size() == 0 and cnt == 0:
        print('yes')
    else:
        print('no')

 

스택에 왼쪽 소괄호, 대괄호를 넣어주고 오른쪽 괄호가 들어왔을 때

스택의 top과 짝이 맞으면 pop을 하고아니면 cnt(카운트)에 1을 더하게 했습니다.

 

그래서 스택의 size도 0이고 cnt가 0일 때만 yes를 출력해줍니다.

'IT > 알고리즘' 카테고리의 다른 글

백준 - 5430번  (0) 2020.11.13
알고리즘 - 큐(queue)  (0) 2020.11.12
백준 - 1406번  (0) 2020.11.09
백준 - 9012번  (0) 2020.11.07
알고리즘 - 스택(deque)  (0) 2020.11.06

댓글