[Python] 프로그래머스 올바른괄호

hyewon9913·2024년 5월 29일
0

코딩테스트(python)

목록 보기
21/46

처음 이 문제를 접했을때 스택 또는 큐로 풀어야겠다는 생각은 들었으나 어떻게 활용해서 해결해야할지는 쉽게 감이 잡히지는 않았다.

앞에서부터 for 문으로 돌려서 하는 방법을 처음에 생각했는데 각 케이스별로 처리를 해주는 것이 쉽지 않다고 생각이 들었다.
그래서 뒤에서부터 처리하는 stack.pop 을 통해 문제를 해결해야겠다고 생각했다.

처음에 작성한 코드는

def solution(s):
    answer = True
    stack = list(s)
    r = 0
    rcheck = False
    
    while(stack):
        c = stack.pop()
        if c == ')':
            r+=1
            rcheck = True
        if c == '(':
            #이전에 ')'가 나왔었다면
            if rcheck:
                r-=1
                #해당 '('로 인해 더이상 남는 ')'가 없다면
                if r == 0:
                    rcheck = False
                    
            else:
                answer = False
  
                    

        
    
    

    return answer

이 코드인데 제출해본 결과 테스트케이스 딱 한개에서 걸렸다,,,,

그래서 어떤 예외가 있을지 곰곰히 생각해보다가 ')'의 개수를 세는 r을 '('을 만나면 빼주어 답이 True 일 때에는 r이 항상 0이 나와야 되는데 이 부분에 대해서 처리를 해주기로 생각했다.

def solution(s):
    answer = True
    stack = list(s)
    r = 0
    rcheck = False
    
    while(stack):
        c = stack.pop()
        if c == ')':
            r+=1
            rcheck = True
        if c == '(':
            #이전에 ')'가 나왔었다면
            if rcheck:
                r-=1
                #해당 '('로 인해 더이상 남는 ')'가 없다면
                if r == 0:
                    rcheck = False
                    
            else:
                answer = False
    if r!= 0 :
        answer = False
                    

        
    
    

    return answer

이렇게 해서 문제를 해결해 주었다.

관건은 이전에 ')'가 나왔었는지 체크해주는 rcheck와 그 개수를 세주는 r 이라는 변수를 두어 이전에 ')' 이 괄호가 나왔고 이것의 개수에 맞게 '(' 가 왔는지를 처리해주는데에 중점을 두었다.

profile
차근차근 굴러가는 코딩일지

0개의 댓글