
🔗 Link
https://school.programmers.co.kr/learn/courses/30/lessons/12909
💡 나의 코드
# test case만 통과
def solution(s):
answer = True
data = list(s)
answer_list = []
for d in data:
if len(answer_list)==0 and d == ')':
return False
elif len(answer_list)==0 or d == '(':
answer_list.append(d)
data.pop()
elif answer_list[-1] == '(' and d == ')':
data.pop()
answer_list.pop(-1)
if len(answer_list)>=2:
return False
else:
return True
나올 수 있는 경우의 수를 모두 고려해가면서 작성했다고 했지만 여전히 예외처리가 부족했던 코드였던 것 같다. 결과적으로 테스트 케이스만 통과하고 실제 제출에서 대부분을 실패했다.
# 두번째 코드
# 최종적으로 2개 실패
def solution(s):
answer = True
answer_list = []
for d in s:
if len(answer_list) == 0 and d == ')':
return False
elif len(answer_list) == 0:
answer_list.append(d)
answer = False
elif answer_list[-1] != d:
answer = True
answer_list.pop()
else:
answer_list.append(d)
answer = False
return answer
첫번째 코드를 보다보니 쓸데없이 들어가있는 부분이 많아 그 부분들을 수정했다.
또한 아직 스택에 대한 이해가 부족해 잘못 생각하고 있던 부분들도 다수 존재했다.
위 코드로 모든 경우를 다 예외처리 했다고 생각했지만 결과적으로 2개 실패 ..
하지만 이내 가장 큰 문제점을 찾았다.
최대한 간결하고 깔끔한 코드를 작성하는게 목표지만 현재 보이는 코드들은 모두 경우의 수를 일일이 작성하는 경향이 있어 코드가 간결하지 못하다.
# 통과
def solution(s):
answer_list = []
for d in s:
if d == '(':
answer_list.append(d)
else:
if answer_list:
answer_list.pop()
else:
return False
if answer_list:
return False
return True
위 코드가 내가 생각했던 방식을 가장 간결하게 정리한 코드이다.
이렇게 간결하게 적을 수 있는데 너무 모든 경우의 수를 적을려고 한 잘못인 것 같다
앞으로 내가 생각한 모든 경우의 수를 정리한 다음 최대한 간결하게 코드를 작성하려는 노력이 많이 필요할 것 같다!