[백준] 1662번: 압축

프로타쿠·2024년 8월 2일

백준

목록 보기
1/24

Solved.ac 골드5
https://www.acmicpc.net/problem/1662

문제

설명

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

입력

첫째 줄에 압축된 문자열 S가 들어온다. S의 길이는 최대 50이다.
문자열은 (, ), 0-9사이의 숫자로만 들어온다.

출력

첫째 줄에 압축되지 않은 문자열의 길이를 출력한다.
이 값은 2,147,473,647 보다 작거나 같다.

해결 Tip

알고리즘 분류

  • 자료구조
  • 스택
  • 재귀

입력된 문자열 S에서 ")" 가 나올 때마다 함수를 실행시켜서 압축을 푼다

코드

#include <bits/stdc++.h>
#define fastio ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;

int ans;
string S;
stack<char> st;

int solve() {
    char c;
    int len = 0;
    while (!st.empty()) {
        c = st.top();
        st.pop();

        if (c == ')') {
            len += solve();
        }
        else if (c == '(') {
            int cnt = st.top() - 48;
            st.pop();
            return cnt * len;
        }
        else {
            len++;
        }
    }
    return len;
}

int main() {
    fastio;
    cin >> S;
    for (char c : S)
        st.push(c);
    cout << solve();

    return 0;
}
profile
안녕하세요! 프로타쿠입니다

0개의 댓글