본문 바로가기
문제 풀이/프로그래머스 (Programmers)

[Python] 프로그래머스 : 괄호 변환

by 희조당 2022. 6. 23.
728x90

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

 

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

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

programmers.co.kr


 문제 풀이

재귀와 문자열의 이해를 묻는 문제였다.

주어진 절차 그대로 해결하면 된다.

def isCorrect(str):
    test = []
    for element in str:
        if len(test) == 0: test.append(element)
        elif test[-1] == '(' and element == ')': test.pop()
        else: test.append(element)
        
    return True if len(test) == 0 else False

주어진 문자열이 올바른 문자열인지 확인하는 함수이다. 스택의 원리를 이용한다!

def seperateStr(str):
    l = r = 0
    for i in range(len(str)):
        if str[i] == '(': l +=1
        else: r+=1
        if l == r:
            return str[:i+1], str[i+1:]

문자열을 u, v로 두 개로 나누는 함수이다.

균형 잡힌 문자열이 되는 index를 찾아 2개의 문자열을 반환한다.

 

나머지는 주어진 절차 그대로 따라간다.

 느낀 점

그렇게 어렵지는 않았다. 문자열을 다룰 수 있고 재귀를 이해하는지 물어보는 문제였다. 딱 이 정도는 기분 좋게 풀 수 있을 것 같다.

 코드

def isCorrect(str):
    test = []
    for element in str:
        if len(test) == 0: test.append(element)
        elif test[-1] == '(' and element == ')': test.pop()
        else: test.append(element)
        
    return True if len(test) == 0 else False

def seperateStr(str):
    l = r = 0
    for i in range(len(str)):
        if str[i] == '(': l +=1
        else: r+=1
        if l == r:
            return str[:i+1], str[i+1:]
    
def reverseStr(str):
    tmp = ''
    for ch in str:
        if ch == ')': tmp += '('
        else: tmp += ')'
    return tmp
    
def solution(p):
    answer = ''
    if isCorrect(p): answer += p
    else: 
        u, v = seperateStr(p)
        if isCorrect(u):
            u += solution(v)
            answer += u
        else:
            u = reverseStr(u[1:len(u)-1])
            tmp = '(' + solution(v) + ')' + u
            answer += tmp
        
    return answer

댓글