LeetCode #20

Kiyong Lee·2022년 1월 7일
0

leetcode

목록 보기
6/20

20. valid_parentheses


1. 코드

class Solution:
    def isValid(self, s: str) -> bool:
        if len(s)%2==1 : return False
        if len(s)==0 : return False
        
        str_dic = {
            ')' : '(',
            '}' : '{',
            ']' : '['
        }
        
        v_list = []  

        for i in s :
            if i in str_dic.values() :
                v_list.append(i)
            
            else :
                if v_list and v_list[-1] == str_dic[i] :
                    v_list.pop()
                    
                else : return False
        
        if v_list : return False
        
        return True 

2. 풀이

첫 번째로, 우선 홀수일경우는 괄호의 짝이 맞지 않으므로 무조건 False이고,
문자열의 길이 역시 최소 1이기 때문에
아무것도 안들어온 빈 문자열일 시 False를 리턴하도록 설정

두 번째로, 처음에는 여는 괄호를 Key로 하고 닫는 괄호를 Value로 하려 했는데 Stack을 통해
넣고 빼고 했을 때 반대로 하는 게 나한테는 덜 헷갈려서 순서를 바꿈

세 번째로, value의 리스트를 담기 위해 빈 리스트인 v_list 선언

네 번째로, 문자열 s를 반복문 돌릴 때 그 문자열이 value에 있는 거라면 v_list에 추가

다섯 번째로, 만약 value에 없다면(여는 괄호라면) 이 부분에서 되게 헷갈렸다
문제를 제대로 읽지 않아 여는 괄호가 들어간 역순에 맞게 닫히는 걸 못 봤기 때문이다.
말 그대로 stack의 특징을 나타낸 문제였음
그래서 v_list의 마지막 값과 반복문을 통해 얻은 문자열을 통해 얻은 value 값이 같을 경우
v_list에서 한 개씩 빼내었다.

마지막으로, 값이 다를 경우 stack의 특징을 어긴것이므로 False가 리턴되고 v_list가 남아있을 경우도 마찬가지다
stack의 특징에 맞춰 짝맞게 다 없어져야 하는데 남아있는 게 있다는 것이기 때문이다.
이 모든 False조건을 빗겨갔다면 자신있게 True 리턴

profile
ISTJ인 K-개발자

0개의 댓글