🤔 나의 풀이
📌 문제
- 파이썬 알고리즘 인터뷰 20번 문제
- 괄호가 유효한지 판단하는 문제이다.
📌 날짜
2020.01.28
📌 시도 횟수
3 try
💡 Code
class Solution:
def isValid(self, s: str) -> bool:
pair = {")": "(", "}": "{", "]": "["}
arr = []
for char in s:
if char in "({[":
arr.append(char)
if char in ")}]":
if len(arr) == 0:
return False
if pair[char] != arr.pop():
return False
if len(arr) != 0:
return False
return True
💡 문제 해결 방법
- 여는 괄호이면 list에 넣는다.
- 닫는 괄호이면 list.pop()한 것과 현재 괄호가 같은 종류의 한 쌍이 되는지 판별한다.
- 만약 다르다면 False를 반환한다.
- 모든 문자열에 대한 검사를 끝냈을 때, list에 남아있는 괄호가 있으면 안된다.
- 만약 남아있다면 False를 리턴한다.
- 모두 통과했다면 True를 리턴한다.
💡 새롭게 알게 된 점
- 미리 괄호 쌍을 dict로 만들어놓으면 편하다.
- dict를 검사할 때 dict[key]를 통해 value를 검사할 수 있음을 기억하자.
- 이 문제는 list를 stack처럼 사용하는 문제이다. 스택의 특징은 LIFO이다.
❌ (한번에 맞추지 못한 경우) 오답의 원인
-
😉 다른 풀이
📌 하나. 내 풀이랑 비슷한데 좀 더 간결한 풀이
class Solution:
def isValid(self, s: str) -> bool:
pair = {")": "(", "}": "{", "]": "["}
stack = []
for char in s:
if char not in pair:
stack.append(char)
elif not stack or pair[char] != stack.pop():
return False
return len(stack) == 0
💡 새롭게 알게 된 점
- 정말 깔끔한 풀이인 것 같다.
- 만들어놓은 pair dict를 조건문과 in을 활용하여 효율적으로 사용했다.
- return len(stack) == 0으로 코드를 최적화한게 너무 예쁘다😍