여섯 가지 괄호 ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’, ‘]’로 이루어진 문자열이 바르게 닫힌 문자열인지 알아보려 합니다. 바르게 닫힌 문자열이라는 것은
- ’(‘ 문자로 열렸으면 반드시 짝지어서 ‘)’ 문자로,
- ’[’ 문자로 열렸으면 반드시 짝지어서 ‘]’ 문자로,
- ’{‘ 문자로 열렸으면 반드시 짝지어서 ‘}’ 문자로
닫히는 문자열입니다. 또한, 괄호 쌍 안에는 다른 괄호 쌍이 들어갈 수 있습니다. 예를 들어,
- {{}}, ({})[]는 바르게 닫힌 괄호입니다.
- ), [, ([())]는 바르게 닫히지 않은 괄호입니다.
문자열 s가 주어졌을 때, 문자열 s가 바르게 닫힌 괄호이면 true를, 그렇지 않으면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 문자열 s는 (, ), {, }, [, ] 로만 이루어졌습니다.
- 문자열 s의 길이는 1 이상 40 이하입니다.
입출력 예
s | answer |
---|---|
{{}} | true |
({})[] | true |
[) | false |
]()[ | false |
([())] | false |
나의 풀이
def solution(s):
if len(s) % 2 != 0:
return False
s_dict = {
")": "(",
"}": "{",
"]": "["
}
stack = []
for elm in s:
if stack:
if elm == "(" or elm == "{" or elm == "[":
stack.append(elm)
else:
tmp = s_dict[elm]
if stack[-1] == tmp:
stack.pop()
else:
stack.append(elm)
return False if len(stack) > 0 else True
코드 개선
def solution(s):
if len(s) % 2 != 0:
return False
pairs = {
")": "(",
"}": "{",
"]": "["
}
stack = []
for elm in s:
if stack:
if elm in pairs:
tmp = pairs[elm]
if stack[-1] == tmp:
stack.pop()
else:
stack.append(elm)
else:
stack.append(elm)
return len(stack) == 0