본문 바로가기

두두의 알고리즘/문제

[재귀함수] 프로그래머스 L2 '괄호 변환' (Python)

728x90

<문제 링크>

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

 

코딩테스트 연습 - 괄호 변환

카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를

programmers.co.kr


<문제 풀이>

  1. 균형 잡힌 괄호 문자열과 올바른 괄호 문자열을 확인하는 함수를 각각 생성한다.
  2. 결괏값을 도출할 수 있는 조건이 문제에 자세히 쓰여 있으므로 하나씩 코드를 짠다.

<코드>

#1차시도 - 테스트 2,4,6,7,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25
def solution(p):
    answer = ''
    w=""
    for i in p:
        w += i
        if '()' in w:
            w=w.replace('()','')
    if w=='':
        answer = p
    else:
        for i in p[::-1]:
            answer += i
    return answer

 

#답 확인 후 일주일 후 2차시도
def balance(p):
    cnt = 0
    for idx, i in enumerate(p):
        if i=='(':
            cnt += 1
        else:
            cnt -= 1
        if cnt==0:
            return idx+1
def correct(w):
    if w[0]=='(':
        return True
    return False
def turn(w):
    a = ''
    for i in w:
        if i=='(':
            a+=')'
        else:
            a+='('
    return a

def solution(p):
    answer = ''
    if p=='':
        return ''
    idx = balance(p)
    u = p[:idx]
    v = p[idx:]
    if not correct(u):
        empty = '('
        empty += solution(v)
        empty += ')'
        empty += turn(u[1:-1])
        answer += empty
    else:
        answer += u
        answer += solution(v)
        
    return answer

 

<고쳐야 할 점>

  • 구현 문제는 문제를 꼼꼼히 읽고 순서대로 알고리즘을 짠다.