Q. 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다.
예를 들어
"()()" 또는 "(())()" 는 올바른 괄호입니다.
")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
[입출력 예]
"()()" : true
"(())()" : true
")()(" : false
"(()(" : false
처음에 생각한 접근 방식? 조건들은
따라서 새로운 배열을 정의해서 for문이 도는 동안 i가 (인 경우는 배열에 추가하고, )인 경우는 기존 배열의 원소를 삭제하는 스택 원리를 활용한 풀이를 작성해 보았다.
def solution(s):
arr = []
for i in range(len(s)):
if i == 0 or s[i] == '(':
arr.append(i)
else:
arr.pop()
if arr == [] :
answer = True
else :
answer = False
return answer
근데 코드를 이렇게 짜면 테스트 코드는 통과하는데 채점 시 오답으로 나온다..
뭘 놓쳤을까 생각해보니, (와 )의 개수가 같아 arr가 빈 배열인 상태인 경우를 놓쳤다. 따라서 s[i]가 ')'인 경우, arr가 빈 배열인지 여부를 확인해 주는 로직이 필요할 것 같다.
최종적으로 수정한 코드는 다음과 같다.
def solution(s):
arr = []
for i in range(len(s)):
if i == 0 or s[i] == '(':
arr.append(i)
elif arr != [] and s[i] == ')':
arr.pop()
else:
answer = False
if arr == [] :
answer = True
else :
answer = False
return answer