1662번: 압축
압축되지 않은 문자열 S가 주어졌을 때, 이 문자열중 어떤 부분 문자열은 K(Q)와 같이 압축 할 수 있다. K는 한자리 정수이고, Q는 0자리 이상의 문자열이다. 이 Q라는 문자열이 K번 반복된다는 뜻이
www.acmicpc.net
스택과 재귀를 이용하는 구현 문제였다.
문자열을 탐색하면서 숫자를 만날 경우 스택에 쌓아두고 '(' 를 만날 경우 그 다음 인덱스부터 재귀호출 하여 반환된 값에 스택의 가장 위에 있는 숫자를 곱해주는 방식으로 구현하였다.
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int decompress(string& str, int& here) {
stack<char> stk;
int ret = 0;
while (str.size() > here) {
if (str[here] == '(') {
ret += (stk.top() - '0') * decompress(str, ++here);
stk.pop();
}
else if (str[here] == ')') {
here++;
break;
}
else
stk.push(str[here++]);
}
ret += stk.size();
return ret;
}
int main(void) {
string str;
cin >> str;
int start = 0;
cout << decompress(str, start) << endl;
return 0;
}

'알고리즘 > BOJ' 카테고리의 다른 글
백준 11660번: 구간 합 구하기 5 (0) | 2022.10.14 |
---|---|
백준 2839번: 설탕 배달 (0) | 2022.10.14 |
백준 14719번: 빗물 (0) | 2021.10.23 |
백준 1107번: 리모컨 (0) | 2021.10.22 |
백준 12015번: 가장 긴 증가하는 부분수열 2 (0) | 2021.10.22 |