[99클럽 코테 스터디 2기][Python/비기너] 네번째 문제 : Valid Parentheses

최민지·2024년 5월 23일
0
post-thumbnail

99클럽 스테디 네번째 문제
주제는 아마 스택인듯 하다!

문제

입력과 출력

코드

class Solution:
    def isValid(self, s: str) -> bool:
        stack=[]
        #열리는 괄호가 잇으면 닫는 괄호를 스택에 넣기
        #닫는 괄호라면 스택 마지막이 닫는 괄호라면 
        #그 닫는 괄호에 맞는 여는괄호와 스택에 마지막으로 들어간 애가 동일한지 
        #동일하면 스택에서 꺼내기
        #짝이 안맞는다면 false 반환
        #스택이 비어있지 않으면 0반환
        #비어있으면 1반환
        brackets={')':'(',']':'[','}':'{'}
        for bracket in s:
            if bracket in brackets.values():
                stack.append(bracket)
            else:
                if stack and brackets[bracket]==stack[-1]:
                    stack.pop()
                else:
                    return False
        if stack:
            return False
        else:
            return True

코드 출처
이번 문제는 갈피를 못잡겠어서.. 오래 고민하다가 이 블로그 코드가 정리가 잘 되어있고 간결하다고 생각해
코드를 보고 공부를 하는 방식으로 진행했다...

근데 더 찾아보니 코드가 거의 다 똑같더라..?! 어디 공개된 정답 코드인가..???

저 많은 주석들이,, 내용이해하려고 한 흔적들...

알고리즘
#열리는 괄호가 잇으면 닫는 괄호를 스택에 넣기
#입력받은 게 닫는 괄호라면-> 스택 마지막이 닫는 괄호인지 확인
#그 닫는 괄호에 맞는 여는괄호와 스택에 마지막으로 들어간 애가 동일한지
#동일하면 스택에서 꺼내기
#짝이 안맞는다면 false 반환
#스택이 비어있지 않으면 0반환
#비어있으면 1반환

def isValid(self, s: str) -> bool:
코드를 처음봤을 때 이 부분에서 가장 먼저 헤맸다..
파이썬 초보라 이런 형식을 처음 봐서 뭐지...? 어떻게 시작해야되지 하고 정신이 없었다..

그리고 문제를 읽고 나서는, 문자열을 if문을 써서 하나하나 비교하면 되려나..? 그럼 짝을 맞추는건 어떻게 해야하지 에서 막혔었다..

Something new I learned
(1) 나는 보통 알고리즘을 짤때, 리스트를 비교해야한다면 if문을 통해 각각 비교했었다.
그러나 비교할 문자들을 따로 배열을 만들어 비교하는 게 코드를 짤 때 좀 더 효율적이고 간결한 것같다. 이 문제도 그렇지만 어제 좌표이동? R L U D로 좌표를 이동하는 알고리즘을 공부했었는데, 이를 배열에 담고, 같은 순서대로 x좌표 변화 배열과 y좌표변화 배열을 따로 만들어 사용하니 훨씬 알아보기 쉽고 코드를 짜기도 수월했다.

To do List
(1) 이번 문제의 또 다른 풀이가 있을지 고민해보기
(2) 스택 알고리즘 공부

오늘은 저녁에 급한 일이 생겨 게더타운에는 참여하지 못할거같아 오전부터 공부해서 지금 올린다.. ㅜㅜ

profile
공부..일기....

0개의 댓글