(2020 KAKAO Blind Recruitment) 괄호 변환

Problem

카카오 홈페이지 코멘트

  • 정답률: 23.1%
  • 출제 의도
    • 주어진 로직을 그대로 구현할 수 있는지 파악
    • 재귀함수를 이해하고 작성할 수 있는지 파악
  • 해설
    • 올바른 괄호쌍이라는 친숙한 내용과 관련된 문제입니다. 문제에는 짝이 맞지 않는 괄호가 주어졌을 때, 이를 짝이 맞는 괄호로 변환하는 방법이 제시되었습니다. 괄호쌍을 확인하는 방법과 재귀함수에 대해 이해하고 있고, 문제에 주어진 대로 정확히 코딩할 수 있다면 어렵지 않게 해결할 수 있었습니다.

My solution

def solution(p):
    def divide_uv(s):
        count_l = 0
        count_r = 0
        for i in range(len(s)):
            if s[i] == '(':
                count_l += 1
            else: # s[i] == ')':
                count_r += 1
            if count_l == count_r:
                break
        return s[:i+1], s[i+1:]
    def right(s):
        result = True
        count = 0
        for i in range(len(s)):
            if s[i] == '(':
                count += 1
            else: # s[i] == ')':
                count -= 1
            if count < 0:
                result = False
                break
        return result
        
    if p is '': # 1번 조건
        return ''
    
    u, v = divide_uv(p) # 2번 조건
    if right(u) == True: # 3번 조건
        return u+solution(v)
    else: # right(u) == False: 4번 조건
        answer = '(' #4-1
        answer += solution(v) #4-2
        answer += ')' #4-3
        
        del_u = u[1:-1] #4-4
        for i in range(len(del_u)):
            if del_u[i] == '(':
                answer += ')'
            else: # del_u[i] == ')':
                answer += '('
        return answer #4-5

댓글