s는 여러 괄호들로 이루어진 String 인자입니다. s가 유효한 표현인지 아닌지 true/false로 반환해라.
종류는 '(', ')', '[', ']', '{', '}' 으로 총 6개 있습니다. 아래의 경우 유효하다.
한 번 괄호를 시작했으면, 같은 괄호로 끝내야 한다. 괄호 순서가 맞아야 한다.
s = "()"
return true
s = "()[]{}"
return true
s = "(]"
return false
s = "([)]"
return false
s = "{[]}"
return true
1) 인자로 '(', ')', '[', ']', '{', '}' 를 받는다.
2) True, False를 반환한다.
3) 괄호 시작과 끝의 순서가 맞아야 한다.
1) string이 True가 나오기 위해서는 짝이 맞아야 하므로 len(string)이 짝수이어야 한다.
2) replace 메소드를 사용해서 (), [], {}로 되어 있는 것들을 ""으로 바꾸자.
if len(string) % 2 == 0:
for i in range(len(string)):
string = string.replace("()", '')
string = string.replace("[]", '')
string = string.replace("{}", '')
if len(string) == 0:
return True
else:
return False
if len(string) > 0:
return False
1) len(string)이 짝수 일떄 아닐 때로 구분한 것은 좋은 방법이었다.
2) replace를 일일이 주는 방법 말고 좋은 방법이 있을 것 같다.
3) 마지막 if문은 예외 처리 용도라 if문 말고 다른 좋은 방법이 있을 것 같다.
def is_valid(string):
while '()'in string or '[]' in string or '{}' in string:
for i in ['()','[]','{}']:
string = string.replace(i,'')
return string == ''
1) for문을 쓰지 않고 while문을 사용한 케이스이다. while문 조건으로 string 내에 '()', '[]', '{}'가 없으면 반복이 끝나게 되어 있다.
2) replace를 통해서 바로바로 괄호를 없앤다.
3) 마지막에 string내 값이 비어있으면 True, 비어 있지 않으면 False