본문 바로가기
Leetcode

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

by YGSEO 2021. 3. 28.
728x90
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

방법은 맞았는데 계속 index 에러가 난 이유를 못찾다가.

 

아래 문제 다시보니 stack이 빌 경우에도 채워줘야 하는 조건이 안들어가 있었기 때문에 에러가 발생.

어려운건 아니지만 놓치기 쉬운 조건이기 때문에 pair 문제에서는 이제 pop말고 stack이 빌 경우 채워주는 조건을 까먹기 말고 넣자.

 


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

        stack = []

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

                stack.pop()
            else:
                stack.append(s[i])
        print(stack)
        if len(stack) == 0:
            return True
        else:
            return False

그냥 range 써서 할 경우


 

ygseo.tistory.com/171

 

[프로그래머스] 짝지어 제거하기 파이썬 (stack, pop)

다른 사람의 풀이 def solution(s): stack = [] stack.append(s[0]) for i in s: if len(stack) == 0: # 최초에 stack이 비었더라도 loop진행중 stack이 비워지면 다시 채워넣기 stack.append(i) elif stack[-1] =..

ygseo.tistory.com

 

728x90

댓글