일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- SQL 고득점 Kit
- python
- 4주 프로젝트
- 백준
- LeetCode
- 타임어택
- 프로그래머스
- 코드스테이츠
- 타입스크립트 올인원
- codestates
- 알고리즘
- til
- 손에 익히며 배우는 네트워크 첫걸음
- programmers
- 토익
- 회고
- 리덕스
- javascript
- 리트코드
- 코어 자바스크립트
- 제로초
- 정재남
- 자바스크립트
- 2주 프로젝트
- Async
- 타입스크립트
- js
- 리액트
- 파이썬
- 렛츠기릿 자바스크립트
Archives
- Today
- Total
Jerry
[leetcode][파이썬]Valid Parentheses #005 본문
반응형
https://leetcode.com/problems/valid-parentheses/description/
오늘풀어본 문제는 " Valid Parentheses" 이다.
주어진 괄호 3가지 유형, 대괄호([ ]), 중괄호({ }), 소괄호(( ))을 일정 조건에 부합하지는 여부를 판단하는 문제이다.
풀이 #1 - 딕셔너리(dictionary) + Stack
class Solution:
def isValid(self, s: str) -> bool:
stack = []
brackets = {
"]": "[",
"}": "{",
")": "(",
}
for bracket in s:
if bracket in brackets:
top_element = stack.pop() if stack else "#"
if brackets[bracket] != top_element:
return False
else:
stack.append(bracket)
return not stack
내가 고안한 방법은 brackets 딕셔너리를 만들어 파라미터로 주어진 괄호에 맞는 괄호가 나오지 않을 때 False 반환, 그렇지 않으면 True 반환하는 로직을 생각했었다. 되게 간단하게 생각했는데 반복문에서 인덱스를 이용해 현재 값과 이전에 나온 값에 매칭 여부를 판단하려고 하는 과정에서 약간의 어려움이 있었다.
예를 들어, 아래와 같은 방식이든
if not stack or (len(stack) - 1 > 0 and brackets[stack[len(stack) - 1]] != bracket):
stack.append(bracket)
이런 방식이었다.
if len(stack) - 1 >= 0 and brackets[stack[len(stack) - 1]] in list(brackets.keys()) and brackets[stack[len(stack) - 1]] == bracket:
stack.pop()
if 조건문안에 하위 표현(sub-expression)을 했으면 됐는데, 문제를 풀어내는 것에 중점을 두는 것에 내 자신이 생각하는 이상적인 코드를 만들어 가겠다는 강박을 좀 버려야겠다.
또한, 배열이나 딕셔너리 사용할 때, 인덱스를 위주로 활용해 풀려는 경향이 있는 거 같다. 해당 자료구조를 잘 이해하고 있다고 생각하지만 아직 부족하다. 파이썬 문법도 아직 서투르다.
알게된 점
- stack 자료구조를 이용해 문제를 풀어나는 방식에 대해 알게 된 시간이었다.
반응형
'Problem Solving > Algorithm 문제 풀기' 카테고리의 다른 글
[leetcode][파이썬]Remove Duplicates from Sorted Array #007 (0) | 2024.05.22 |
---|---|
[leetcode][파이썬]Merge Two Sorted Lists #006 (0) | 2024.05.22 |
[leetcode][파이썬]Longest Common Prefix #004 (0) | 2024.05.21 |
[leetcode][파이썬]Roman to Integer #003 (0) | 2024.05.20 |
[leetcode][파이썬]Palindrome Number #002 (0) | 2024.05.19 |