"일월오봉도"
s
는 여러 괄호들로 이루어진 String 인자
입니다. s
가 유효한 표현인지 아닌지 true
/false
로 반환해주세요.
종류는 (
, )
, [
, ]
, {
, }
으로 총 6개 있습니다. 아래의 경우 유효합니다.
한 번 괄호를 시작했으면, 같은 괄호로 끝내야 한다. 괄호 순서가 맞아야 한다.
예를 들어 아래와 같습니다.
s = "()"
return true
s = "()[]{}"
return true
s = "(]"
return false
s = "([)]"
return false
s = "{[]}"
return true
len(string)
에 대한 반복문이 돌 때까지,- 매칭이 되는
()
{}
[]
가 있으면 지워서- 다 지운 상태로 빈 배열이면
True
- 비어 있지 않으면
False
이다.
- 위의 접근 방식에서 반복문이 잘 돌아가지 않아
(())[]
같이 괄호 안의 괄호가 결국 지워지지 않아True
인데False
가 나온다.
def is_valid(string):
while(len(string) == 0):
string = string.replace("()", '')
string = string.replace("[]", '')
string = string.replace("{}", '')
if string == '':
return True
else:
return False
# 반례: '(())[]' -> True여야 하는데 False로 나온다
while 문
이 아닌for 문
으로,range
를 써서 인덱스 길이까지 순회한다- 애초에 짝이 맞으면 개수가 짝수이기에 홀수이면 무조건
False
로 반환- 짝수이고 반복문을 돌려서
string
의 길이가0
이면True
이다.replace
를 돌렸는데도 매칭이 되지 않아 살아 있는string
의 길이는 0보다 크므로 이것 또한False
로 반환했다.
def is_valid(string):
if len(string) % 2 == 0:
for i in range(len(string)): # len(string)이 아닌 len(string)//2도 괜찮다.
string = string.replace("()", '')
string = string.replace("[]", '')
string = string.replace("{}", '')
if len(string) == 0:
return True
else:
return False
if len(string) > 0:
return False