블로그 이름 뭐로 하지

[알고리즘] 프로그래머스 - 괄호 변환 본문

알고리즘

[알고리즘] 프로그래머스 - 괄호 변환

발등이 따뜻한 사람 2024. 1. 9. 21:13

문제

https://school.programmers.co.kr/learn/courses/30/lessons/60058

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이

정말정말 전형적인 하라는대로 하면 되는 문제.

결국 알고리즘이란게.. 내 머릿속에 드는 생각을 코드로 옮기는 건데, 구현 유형 문제를 풀 때 특히나 더 와닿는 것 같다.

문제에 과정이 주어지므로 해당 과정을 그대로 코드로 옮기면 된다.

 

 

코드

def solution(p):
    answer = ''
    
    # u가 올바른 괄호 문자열인지 체크
    def check_u(u):
        s = 0
        for a in u:
            if a == '(':
                s += 1
            else:
                if s>0:
                    s-=1
                else:
                    return False
        return True
    
    def make_str(w):
        if w == '':
            return ''
        
        dic={'(':0 , ')':0}
        u = ''
        
        for i,a in enumerate(list(w)):
            dic[a] += 1
            u += a
            end = i
            
            if dic['('] == dic[")"]:
                break
        
        if end == len(w):
            v = ''
        else:
            v = w[end+1:]
            
        # 문자열 u가 올바른 괄호 문자열인 경우
        if check_u(u):
            result = make_str(v)
            return u+result
        
        # 문자열 u가 올바른 괄호 문자열이 아닌 경우
        else:
        	# 빈문자열 맨 앞에 추가
            tmp = "("
            # v에 대한 1단계부터 수행한 결과
            result = make_str(v)
            # 앞선 결과 붙여주기
            tmp+=result
            # ) 추가
            tmp+=')'
            # u를 양쪽 잘라내기
            u = u[1:-1]
            # ( => ) / ) => ( 변환
            new_u = ''.join([")" if i == "(" else "(" for i in u])
            # 변환한거 붙여주기
            tmp += new_u
            return tmp
        
    answer = make_str(p)
            
    return answer