Algorithm (PS)

[프로그래머스] 카카오 신입 공채 2020 - 괄호변환

minjiwoo 2021. 11. 3. 23:07
728x90

유형 : 구현 

그치 딱 봐도 구현 문제이다.. 그런데 처음에 문제를 이해하는데 '균형 잡힌 괄호 문자열' 이랑 '올바른 괄호 문자열' 이 헷갈렸다 ㅋㅋㅋ

문제 풀이의 핵심은 무엇일까 

재귀함수를 적절히 만들어 주어야 한다 !!!!! 당연한 소리지만 -_-

1. 균형 잡힌 괄호 문자열이 p의 어느 인덱스 까지인지 반환해주는 함수 구현

2. 현재 문자열이 올바르괄호 문자열인지 아닌지 구하는 함수 구현하기 

3. 재귀 함수로 호출할 solution(p) 부분 구현하기 

def balance(p):
    count = 0
    for i in range(len(p)):
        if p[i] == '(':
            count += 1
        else:
            count -= 1
        if count == 0:
            return i

def check(p): 
    count = 0
    for i in p:
        if i == '(':
            count += 1
        else:
            if count <= 0:
                return False
            count -= 1
    return True


def solution(p):
    answer = ''
    if p == '':
        return answer
    index = balance(p)
    u = p[:index+1]
    v = p[index+1:]
    
    if check(u):
        answer = u + solution(v)
    else:
        answer += '('
        answer += solution(v)
        answer += ')'
        u = list(u[1:-1])
        for i in range(len(u)):
            if u[i] == '(':
                u[i] = ')'
            else:
                u[i] = '('
        answer += ''.join(u)
    
    return answer
728x90