• Home
  • About
    • Lajancia Workspace photo

      Lajancia Workspace

      .

    • Learn More
    • Email
    • LinkedIn
    • Instagram
    • Tumblr
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects
  • Record
  • Blender
  • Blockchain

괄호변환[python]

08 Nov 2021

Reading time ~1 minute

괄호 변환


이번 문제는 코딩 문제가 아니라 한국어 능력 평가 같은 시험이었다.

첫 번째 코드

def solution(p):
    answer = ''
    answer=f(p,'')

    return answer

def f(p,result):
    print('this is start')
    u=[]
    v=[]
    check=0
    check1=True
    check2=True

    if len(p)==0:
        print('1')
        return ''

    for i in p:
        if check1:
            if i=='(':
                u.append(i)
                check+=1
            else:
                u.append(i)
                check-=1
                if check<0:
                    check2=False
        else:
            v.append(i)

        if check==0:
            check1=False


    if check2:
        print('2',u,v,result)

        result=result+''.join(u)
        print('result',result)
        return result+f(v,'')

    else:
        print('3',u,v)
        temp='('

        print('temp',temp)
        u.pop(0)
        u.pop(-1)
        print('u',u)
        temp2=''
        for i in u:
            if i=='(':
                temp2=temp2+')'
            else:
                temp2=temp2+'('
        temp3=f(v,'')
        temp=temp+temp3+')'+temp2
        return temp
  • 매우매우 더럽다.
  • 하지만 잘 보면, f함수의 result 값이 계속 ‘‘로 빈 문자열만 들어가는 것이 보인다.
  • 따라서 solution 함수 하나로도 충분히 재귀 함수로 만들 수 있다는 말이다.
def solution(p):
    answer = ''
    u=[]
    v=[]
    check=0
    check1=True
    check2=True

    if len(p)==0:
        return ''

    for i in p:
        if check1:
            if i=='(':
                u.append(i)
                check+=1
            else:
                u.append(i)
                check-=1
                if check<0:
                    check2=False
        else:
            v.append(i)

        if check==0:
            check1=False


    if check2:
        result=''.join(u)
        return result+solution(v)

    else:
        temp='('
        u.pop(0)
        u.pop(-1)
        temp2=''
        for i in u:
            if i=='(':
                temp2=temp2+')'
            else:
                temp2=temp2+'('
        temp3=solution(v)
        temp=temp+temp3+')'+temp2
        answer=temp

    return answer
  • 하나의 재귀 함수로 합쳐주었다.


coding-testpythonalgorithm Share Tweet +1