Post

Programmers_2020 카카오 기출 괄호 변환(python)

프로그래머스 -괄호 변환 문제 입니다.

1. 문제

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


2. 분류 및 난이도

Programmers 문제입니다.
2020 KaKao BLIND RECRUITMENT 문제입니다. Level 2난이도의 문제입니다.


3. 생각한 것들(문제 접근 방법)

  • 재귀함수를 잘 구현할 수 있는 지 묻는 문제입니다.
  • 과정을 잘 따라가면 어렵지 않습니다.
  • checkstr() 함수는 ‘올바른 괄호인지 확인하는 함수입니다.’
  • makestr() 함수는 ‘균형잡힌 괄호 2개로 나눠주는 함수입니다.’
  • reversestr()함수는 ‘괄호들의 방향을 바꿔주는 함수입니다.’
  • solv()함수는 기본적인 재귀함수입니다.

4. 접근 방법을 적용한 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
def checkstr(p):
    li = []
    # stack을 통해 p를 돌면서 괄호의 짝을 확인합니다.
    for i in range(len(p)):
        if p[i] == "(":
            li.append("(")
        else :
            if len(li) == 0 :
                return False
            li.pop()
    return True
def makestr(p):
    idx = 0
    left = 0 
    right = 0
    # p를 돌면서 '(' 갯수와 ')' 갯수가 맞는 최소 구간을 확인합니다.
    while idx <len(p):
        if p[idx] == "(" : 
            left += 1
        else :
            right += 1 
        if left == right : 
            break
        idx+=1
    return p[:left+right] , p[left+right : ]
def reversestr(p) : 
    temp = ""
    for i in range(len(p)):
        if p[i] =="(":
            temp+=")"
        else : 
            temp+="("
    return temp
        
def solv(p):
    if p =="":
        return ""
    if checkstr(p):
        return p
    u,v = makestr(p)
    #print("u : ", u,"v : ",v)
    if checkstr(u) :
        resv = u + solv(v)
        return resv
    else : 
        temp = "("
        temp += solv(v)
        temp += ")"
        u = u[1:-1]
        u = reversestr(u)
        temp+= u 
        return temp
        
    
    
def solution(p):
    p = solv(p)
    
    return p

5. 결과

필요시. c++ 짜드리겠습니다.

This post is licensed under CC BY 4.0 by the author.