
괄호가 제대로 닫혀 있는지 확인 하는 문제이다.
처음에는 two pointer을 사용해서 확인해야 하나? 아니면 하나하나 일일히 기록해야 하나?
라는 생각을 많이 했지만, 전혀 다른 방식으로 푸는 것이었다.
우선 여기서 사용되는 것은 딕셔너리와 stack이라는 개념이다.
stack이 생소할 수 있지만, 리스트를 활용한다 라고 생각하면 된다.
우선 사전 준비를 해야 하는데, 다음과 같다.
ans = [] # answer의 약자
bracket = {')':'(', '}':'{', ']':'['}
이렇게 준비하는 이유는 ans라는 빈 리스트 안에는 괄호의 왼쪽 부분만 넣을 거기 때문이다. -> ( { [ 이 녀석들만 넣을 것이다.
그리고 "괄호의 오른쪽 부분"이 나타날 경우에는, 기존에 있는 ans의 "마지막" 괄호와 매칭이 되는지 확인하는 작업을 할 것이다.
이해가 안가면 귀찮더라도 그려보는 것을 추천한다.
코드는 다음과 같다.
class Solution:
def isValid(self, s: str) -> bool:
ans = []
bracket = {')':'(','}':'{',']':'['}
for b in s:
if b not in bracket:
ans.append(b)
else:
if not ans: # input이 ')()' 이런 식으로 들어올 경우를 생각하는 것이다.
return False
else:
p = ans.pop() #pop()은 리스트에서 맨 마지막 요소를 빼오는 녀석이다.
if p != bracket[b]:
return False
return not ans #무사히 모든 for문을 돌았다면, ans는 빈 리스트가 반환되어야 하기 때문'리트코드 알고리즘 > 리트코드 easy' 카테고리의 다른 글
| (간단한 코드)리트코드 21. Merge Two Sorted Lists (0) | 2024.12.23 |
|---|---|
| (간단한 코드)리트코드 83. Remove Duplicates from Sorted List (0) | 2024.12.22 |
| (간단한 코드)리트코드 682. Baseball Game (0) | 2024.12.18 |
| (간단한 코드)리트코드 125. Valid Palindrome (0) | 2024.12.16 |
| (간단한 코드)리트코드 169. Majority Element (0) | 2024.12.15 |