프로그래머스 레벨2 [정답율 74%]
❓문제
❗문제 정리
사용한 파라미터 :
queue : 입력받은 괄호 문자열을 list로 저장
left(list/string) : 왼쪽 괄호 저장
풀이방법 :
1. '('와 ')'의 수가 같아야함.
2. 시작은 '(', 끝은 ')'가 되어야함.
3. '('가 들어가면 ')'가 나와야함.
📑코드
from collections import deque
def solution(s):
queue=list(s)
left=[]
if s.count("(")==s.count(")"):
if s[0]=='(' and s[-1]==')':
for x in queue:
if x=='(':
left.append(x)
elif x==')' and left and left[-1]=='(':
left.pop()
else:
return False
if not left:
return True
else:
return False
else:
return False
📝코드 설명
queue=list(s)
left=[]
deque로 입력받은 문자열 저장하여 리스트화시킴
'(' 저장할 left 리스트 선언
if s.count("(")==s.count(")"):
조건1) '(', ')'의 개수가 같아야함. 아닌 경우, False리턴
if s[0]=='(' and s[-1]==')':
조건2) 양 사이드가 '(', ')' 이어야함.
for x in queue:
if x=='(':
left.append(x)
elif x==')' and left and left[-1]=='(':
left.pop()
else:
return False
조건3) '('로 시작하면, ')' 닫혀야함.
'('가 나오면 left에 저장했다가, ')'가 나오고 (left가 비어있지 않고) left에 '('가 있으면, left에 있던 '('을 없앰. (()() 이런식으로 괄호가 닫히지 않으면 else문이 실행되어 false반환.
if not left:
return True
🔥파이써닉한 코드🔥 list가 비어있지 않으면, True반환
🎖제출 결과
💡insight
테스트 17번은 괄호의 개수를 비교해야함.
list로 할 수 있으면 하는게 좋은듯. deque보다 list가 시간 복잡도가 좋다(?) 테스트에서 1ms 줄어듦.
반례: ()())(()