아래는 처음 제출한 답안이다. 정확성 테스트의 5, 11, 17번과 효율성 테스트의 2번에서 실패했다.
def solution(s):
if s[0] == ')' or s[-1] == '(':
return False
stack = []
for i in range(len(s)):
if s[i] == '(':
stack.append('(')
elif s[i] == ')':
if stack[-1] == '(':
stack.pop(-1)
else:
return False
return True
stack.pop(-1)을 del stack[-1]로 변경해도 같은 결과를 얻는다.
그래서 다시 한 번 자세히 코드를 들여다 봤더니 for문을 돌면서 stack 리스트가 비어질 수 있고 그러면 stack[-1]을 가져올 수 없으며, stack[-1]이 '(' 외 다른 문자일 수 없다는 걸 깨달았다. 그리고 최종적으로 stack이 모두 비었는지 확인해야 한다.
def solution(s):
if s[0] == ')' or s[-1] == '(':
return False
stack = []
for i in range(len(s)):
if s[i] == '(':
stack.append('(')
elif s[i] == ')':
if len(stack) != 0:
stack.pop()
else:
return False
return len(stack) == 0
추가적으로 코드의 간결함을 원한다면 if len(stack) != 0을 if stack로 변경할 수 있을 것 같다.
쉬운 문제인데 내가 파이썬을 사용해 자료구조를 구성하는 데에 능숙치 않아서 틀린 것 같다.