Algorithm/PS

[엘리스][Python] 시즌2. 알고리즘 코드 챌린지 [Day3] - 문자열 압축 해제

행복한띠용이 2024. 7. 11. 16:59
728x90

https://code-challenge.elice.io/courses/282926/lectures/2455429/lecturepages/21567984/

 

알고리즘 문제집 | 엘리스 코드 챌린지

 

code-challenge.elice.io

 

Day 3

💡 풀이 과정

  • 괄호가 있는 문제는 연산 처리와 비슷하게 Stack 을 사용하면 편하다.
  • 모든 요소들을 Stack 에 집어넣고 ")" 가 나타나면 분기처리한다. 
    • "(" 를 찾을 때까지 진행하며, "(" 다음의 숫자만큼 스택에 존재하는 String 값을 곱해준다.
      • python 에서는 "String" * int 를 진행하면 int 만큼 String 이 반복된다.
    • 이때, 뒤에서부터 진행하는 것이므로 문자열을 더해줄 때 Stack 에서 pop 한 값을 문자열 앞에 더해준다! (물론 글자 길이에서는 변함 없다)
    • 괄호를 다 처리된 문자열들이 Stack 에 쌓여있기 때문에 이를 모두 꺼내 출력한다.

📌 포인트

  • 괄호는 재귀보다 Stack 을 사용
  • 문자열을 더해주는 위치에 주의
  • 3(7) 은 [777] 이 담기지만 111 같은 입력은 Stack 에 [1, 1, 1] 로 담기기에 출력 시 주의

💻  코드

import sys

input = sys.stdin.readline

arr = list(input().strip())
stack = []

for i in arr:
    if i != ")":
        stack.append(i)
    else:
        temp = ""
        while stack[-1] != "(":
            temp = stack.pop() + temp
        stack.pop()
        num = int(stack.pop())
        stack.append(temp * num)

print(len("".join(stack)))
728x90