본문 바로가기

코테

[프로그래머스] <괄호 변환> 파이썬

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

 

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

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

programmers.co.kr

from collections import Counter
flag = ['(',')']

def balance(s) :
    counter = Counter(s)
    if counter[flag[0]] == counter[flag[1]] : return True
    else : return False

def correct(s) :
    stack = []
    stack.append(s[0])
    for i in range(1, len(s)) :
        if len(stack) == 0 or stack[-1]==flag[1] or (stack[-1] == flag[0] and s[i] == flag[0]) :
            stack.append(s[i])
        else : stack.pop()
    if len(stack)==0 : return True
    else : return False
        
            
            
                    

def solution(p):
    answer = '' 
    u, v = '',''
    if len(p) == 0 or correct(p) : return p
    
    for i in range(2, len(p)+1, 2) :
        if balance(p[0:i]) :
            u, v = p[0:i], p[i:]
            break
            
    if correct(u) : 
        answer += u + solution(v)
    else :
        answer += flag[0] + solution(v) + flag[1]
        for i in u[1:-1] :
            if i == flag[0] : answer += flag[1]
            else : answer += flag[0]
    return answer

정확성 테스트

테스트 1 통과 (0.01ms, 10.3MB)
테스트 2 통과 (0.04ms, 10.3MB)
테스트 3 통과 (0.01ms, 10.3MB)
테스트 4 통과 (0.07ms, 10.2MB)
테스트 5 통과 (0.01ms, 10.2MB)
테스트 6 통과 (0.08ms, 10.3MB)
테스트 7 통과 (0.08ms, 10.2MB)
테스트 8 통과 (0.01ms, 10.3MB)
테스트 9 통과 (0.10ms, 10.2MB)
테스트 10 통과 (0.08ms, 10.3MB)
테스트 11 통과 (0.21ms, 10.3MB)
테스트 12 통과 (0.38ms, 10.2MB)
테스트 13 통과 (0.55ms, 10.2MB)
테스트 14 통과 (1.30ms, 10.3MB)
테스트 15 통과 (2.12ms, 10.2MB)
테스트 16 통과 (4.36ms, 10.2MB)
테스트 17 통과 (4.80ms, 10.2MB)
테스트 18 통과 (7.62ms, 10.3MB)
테스트 19 통과 (13.50ms, 10.3MB)
테스트 20 통과 (17.57ms, 10.3MB)
테스트 21 통과 (7.33ms, 10.2MB)
테스트 22 통과 (3.02ms, 10.3MB)
테스트 23 통과 (6.94ms, 10.2MB)
테스트 24 통과 (1.49ms, 10.2MB)
테스트 25 통과 (5.95ms, 10.3MB)

채점 결과

정확성: 100.0

합계: 100.0 / 100.0