def is_valid(string):
type_match = {'(': ')', '[': ']', '{': '}'}
type_check = ['(', '[', '{']
string_list = []
string_final = []
if len(string) <= 1:
return False
if string[0] in type_check:
for i in range(len(string)):
if string[i] in type_check:
string_list.append(string[i])
string_final.append(string[i])
else:
if len(string_list) == 0:
return False
else:
string_final.append(type_match[string_list[-1]])
string_list.pop()
else:
return False
if len(string_list) != 0:
for i in range(len(string_list)):
string_final.append(string_list[i])
return ''.join(string_final) == string
이 문제를 읽었을때 많은 고민을 했다. s = "(){}" 와 같이 같은 타입이 반복되는 경우에는 쉽게 구현할 수 있지만 s = "{[]}" 와 같이 두개씩 비교를 할수 없는 경우로 인해 많이 힘들어진것 같다.
나는 이 문제를 풀기 위해서 어떤 값이 들어왔을때 올바른 값을 만들어서 올바르게 만들어진 값과 들어온 값을 비교해서 True or False를 리턴 시켰다.
예를들어, "({{)" 이 값이 들어온 경우, 올바른 값은 "({{}})" 이다 그래서 올바른 값을 나오게 구현하고 입력값과 비교해서 True or False를 반환하도록 구현한 코드이다.