본문 바로가기
Problem Solving/Recursion

[재귀 / 파이썬 ] 백준 1662번 : 압축 / 골드 5

by ggyongi 2022. 3. 7.
반응형

https://www.acmicpc.net/problem/1662

 

1662번: 압축

압축되지 않은 문자열 S가 주어졌을 때, 이 문자열중 어떤 부분 문자열은 K(Q)와 같이 압축 할 수 있다. K는 한자리 정수이고, Q는 0자리 이상의 문자열이다. 이 Q라는 문자열이 K번 반복된다는 뜻이

www.acmicpc.net

import collections
s = collections.deque([x for x in input()])

def recursion(s):
    if len(s) == 1:
        return 1

    temp = 0
    while s:
        cur = s.popleft()
        if not s:
            temp += 1
            break
        if cur.isnumeric() and s[0] != '(':
            temp += 1
        elif cur.isnumeric() and s[0] == '(':
            stack = []
            stack.append(s.popleft())
            part =collections.deque()
            while True:
                popped = s.popleft()
                if popped.isnumeric():
                    part.append(popped)
                elif popped == '(':
                    stack.append(popped)
                    part.append(popped)
                elif popped == ')':
                    stack.pop()
                    if not stack:
                        break
                    else:
                        part.append(popped)
            a = recursion(part)
            temp += (a*int(cur))
    return temp

result = recursion(s)
print(result)

깔끔한 풀이는 아닌 듯하다. 

재귀 접근 시 계속 멈칫하게 되는데 어떤 파라미터를 재귀함수에 넘겨줄 것인지,

반복되는 틀이 무엇인지를 잡으면

그래도 진행이 좀 되는 것 같다. 

 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글