본문 바로가기
DC 2

[자료구조] 스택 파이썬(LeetCode, Programmers)

by YGSEO 2021. 4. 20.
728x90
class ArrayStack:

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

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

    def isEmpty(self):
        return self.size() == 0

    def push(self, item):
        self.data.append(item)

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

    def peek(self):
        return self.data[-1]


def solution(expr):
    match = {
        ')': '(',
        '}': '{',
        ']': '['
    }
    S = ArrayStack()
    for c in expr:
        if c in '({[':
            S.push(c)
        elif c in match:
            if S.size()==0:
                return False
            else:
                t = S.pop()
                if t != match[c]:
                    return False
    return S.size()==0

스택하면 제일 대표적인 문제 valid parenthesis 여부

 

LeetCode 에서 풀었던 문제

 

[LeetCode] Valid Parentheses 파이썬 (stack, empty stack)

class Solution: def isValid(self, s: str) -> bool: stack = [] for c in s: if len(stack) == 0: # 최초에 stack이 비었더라도 loop진행중 stack이 비워지면 다시 채워넣기 stack.append(c) elif stack[-1] ==..

ygseo.tistory.com

class Solution:
    def isValid(self, s: str) -> bool:

        stack = []

        for c in s:
            if len(stack) == 0: # 최초에 stack이 비었더라도 loop진행중 stack이 비워지면 다시 채워넣기
                stack.append(c)
            elif stack[-1] == "{" and c == "}":
                
                stack.pop()
            elif stack[-1] == "[" and c == "]":
                
                stack.pop()
            elif stack[-1] == "(" and c == ")":

                stack.pop()
            else:
                stack.append(c)
                
        if len(stack) == 0:
            return True
        else:
            return False

프로그래머스에도 있다.

 

코딩테스트 연습 - 올바른 괄호

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은

programmers.co.kr

풀이:

def solution(s):
    answer = True
    stack = []
    

    for i in s:
        if i == '(':
            stack.append(i)
        else:
            try: stack.pop()
            except: return False
    if len(stack) == 0: return True
    else: return False

ygseo.tistory.com/163

 

728x90

댓글