어려울 줄 알았는데 쉽게 풀었다. 아이디어는 간단했다. "()"를 계속 삭제해가면 된다.
그래서 처음엔 replace() 함수를 사용했다. 하지만 효율성 테스트를 통과하지 못했다.
그래서 매번 문자열을 탐색에 중간 값을 삭제하는 replace가 아니라, 차례대로 탐색해가며 삭제하는 게 무엇이 있을까 생각했다. 오, 그렇다. 스택을 떠올렸다.
스택을 사용했더니 효율성 테스트를 통과했다.
가장 끝의 두 값이 완전한 괄호("()")가 되면 pop하여 없애는 방식으로 구현했다. 인덱스가 없어 오류가 생기는 경우를 처리하기 위해 try except 구문을 사용했다.
첫 풀이, 효율성 테스트를 통과하지 못 했다.
def solution(s): # 올바른 괄호 for _ in range(len(s)): s = s.replace("()", "") return len(s) == 0
스택을 활용한 풀이, 효율성 테스트를 통과했다.
def solution(s): # 올바른 괄호 stack = [] for element in s: stack.append(element) find_and_delete_pair_of_bracket(stack) return len(stack) == 0 def find_and_delete_pair_of_bracket(stack): try: if stack[-2:] == ["(", ")"]: stack.pop() stack.pop() except: pass
'프로그래밍-학습기록 > 코딩테스트' 카테고리의 다른 글
프로그래머스 | python | 괄호 변환 | 용기의 문제 (0) | 2020.12.24 |
---|---|
프로그래머스 | python | 스킬트리 (0) | 2020.12.23 |
프로그래머스 | python | level 2 | 다리를 지나는 트럭 (0) | 2020.12.22 |
프로그래머스 | python | level 2 | 튜플 | 어거지로 풀고 공부하기 (0) | 2020.12.21 |
우아한 테크코스 코딩테스트 + 프리코스 회고 (0) | 2020.12.21 |