알고리즘 (JAVA)/프로그래머스 알고리즘

[코테준비 - python] 올바른 괄호 level2 - 개발자 배찌

개발자 배찌 2022. 12. 14. 22:10
728x90


첫 시도! >> 5,11,17실패, 효율성2 실퍠
문제점 : 첫 시작이 ‘)’일때 false 로 잘생각해냈으나, 마지막끝이 ‘(’일때도 false임을 생각하지 못함.
마지막에 ( ) 가 됬을 때, stack에서 pop을 하고나서, 앞쪽에 있던 괄호를 생각을 하지 않고, 뒤에 쌓인것만 비교하게됨.

첫 시도_문제의코드 ㅇ_ㅇ

def solution(s):
    answer = True
    stack = []
    for i in range(len(s)):
        if(s[0] == ')' or s[-1] == '(') :
            answer = False
            break
    for i in range(len(stack)) :
        if stack[i-1:] == ['(',')'] :
            stack.pop()
            stack.pop()
    if len(stack) != 0 :
        answer = False
    return answer


색다르게 생각해보자! 해서
‘(’괄호의 개수가 ‘)’의 개수와 같으면 올바른 괄호가 아닌가?
응 아니야 잘못생각했음.
5번, 11번 실패. 실패케이스가 있나보다.. 역시너무쉽게생각했지

두번째 시도_ 문제의 코드 ㅇ_ㅇ

def solution(s):
    answer = True
    x = 0
    y = 0
    for i in range(len(s)) :
        if(s[0] == ')' or s[-1] == '(') :
            answer = False
            break
        if(s[i] == '(') :
            x += 1
        else : 
            y += 1
    if x != y :
        answer = False
    return answer


과감하게 윗 코드를 버리고 다시 새로짰음!
그치만 또 런타임오류 5,11번…
뭐가문젤까… 고민……..몇시간째….

세번째 시도 _ 문제의 코드 ㅇ_ㅇ

def solution(s):
    answer = True
    stack = []
    for i in range(len(s)) :        
        if(s[0] == ')' or s[-1] == '(') :
            answer = False
            break
            
        stack.append(s[i])
        
        if s[i] == ')' :
            stack.pop()
            stack.pop()
            
    if len(stack) != 0 :
        answer = False
        
    return answer



문제해결!!!
알고보니, (()))))))인 경우,
()를 pop해주고,
)))만 남았을 때가 문제였던 것.!

마지막 시도 _ 해결 코드!!!!!

def solution(s):
    answer = True
    stack = []
    for i in range(len(s)) :        
        if(s[0] == ')' or s[-1] == '(') :
            answer = False
            break
            
        stack.append(s[i])
        
        if s[i] == ')' :
            if len(stack) == 1 :
                answer = False
                break
            else :
                stack.pop()
                stack.pop()
            
    if len(stack) != 0 :
        answer = False
        
    return answer