문제
문제 풀이 방법
class Solution:
def isValid(self, s: str) -> bool:
스택을 이용 안했을때 코드 엄청 복잡하고 틀림..
# answer = []
# if len(s) == 2:
# if s[0] == '(' and s[1] == ')':
# return True
# if s[0] == '[' and s[1] == ']':
# return True
# if s[0] == '{' and s[1] == '}':
# return True
# else:
# return False
# for i in range(len(s)):
# if i != len(s)-1:
# next = s[i+1]
# if s[i] == '(' and next == ")":
# answer.append(s[i])
# answer.append(next)
# elif s[i] == '[' and next == "]":
# answer.append(s[i])
# answer.append(next)
# elif s[i] == '{' and next == "}":
# answer.append(s[i])
# answer.append(next)
# if s[i] == s[len(s)-1] and i != len(s)-2 and i != len(s)-1:
# answer.append(s[i])
# answer.append(s[len(s)-1])
# print(answer)
# if len(answer) % 2 == 0 and len(answer) != 0 and len(answer) == len(s):
# return True
# else:
# return False
스택을 이용한 코드
lst = ['{([']
stack = []
for i in s:
# '{([' 안에 i가 들어있다면 stack에 append
if i in lst[0]:
stack.append(i)
else:
# 스택에 아무것도 없다면 False리턴
if not stack:
return False
# 스택에 맨마지막 문자를 꺼냄
curr = stack.pop()
# 꺼낸 curr하고 i를 비교 다르면 False
if i == ')':
if curr != "(":
return False
if i == ']':
if curr != "[":
return False
if i == '}':
if curr != "{":
return False
if len(s) == 1 or len(stack) != 0:
return False
return True