Given a string s containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.
An input string is valid if:
처음 든 생각: 스택을 쓰자
class Solution:
def isValid(self, s: str) -> bool:
if len(s)%2 != 0:
return False
result = False
stack = []
for i in range(0, len(s)):
stack.append(s[i])
for i in range(0, len(s)):
if s[i] == '(':
for j in range(len(stack)-i-1, 0, -1):
if stack[-j] == ')' and (i+j)%2 != 0:
result = True
break
if s[i] == '{':
for j in range(len(stack)-i-1, 0, -1):
if stack[-j] == '}' and (i+j)%2 != 0:
result = True
break
if s[i] == '[':
for j in range(len(stack)-i-1, 0, -1):
if stack[-j] == ']' and (i+j)%2 != 0:
result = True
break
return result
이중 for 문 Hi~~
반복문의 범위도 직접 계산해서 정하고..
괄호 쌍 사이엔 짝수개의 문자만 들어간다는 점도 고려해서 계산하고..
여러모로 나름대로 계산을 해봤으나.. 뭔가 이상..
그냥 애초에 잘못된 코드임
stack 의 pop 이 필요할 것 같다
class Solution:
def isValid(self, s: str) -> bool:
stack = []
for ch in s:
if ch =='(':
stack.append(')')
elif ch =='{':
stack.append('}')
elif ch =='[':
stack.append(']')
else:
if len(stack) == 0:
return False
if ch != stack.pop():
return False
return len(stack) == 0
내가 꿈꿔온 코드는 이거였다............
stack 을 사용한 코드
괄호의 짝꿍을 찾아 stack 에 넣어줌
짝꿍이 없거나 순서가 바껴서 오면 False
string 도 for ch in s 의 형태로 사용 가능하단 걸 첨 알았다
이걸 몰라서 아까 그렇게 지저분했는데..
그냥 이 코드를 냅다 외우기로.^^