문제 확인
괄호를 기준으로 이전 길이 값이 변경되므로 스택을 활용해서 풀 수 있습니다.
풀이
배열을 따라가면서 문자마다 3가지 경우로 나눌 수 있습니다.
- '(' : 바로 이전의 숫자의 곱만큼 길이가 길어지므로 ary[i-1], 이전 문자열의 길이를 저장합니다.
- ')' : 기록해둔 스텍을 반영합니다.
- 문자 : 현재 길이를 +1 합니다.
스택을 재활용하기 때문에 ')' 문자를 만나면 결과를 반영한 후 stack[top]=0 으로 초기화를 해 주어야 합니다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#include <cstdio>
#include <cstring>
int main() {
char ary[51];
scanf("%s", ary);
int n = strlen(ary);
int stk[50] = { 0 }, rec[50], top = 0;
for (int i = 0; i < n; i++) {
if (ary[i] == '(') {
--stk[top];
rec[++top] = ary[i - 1] - '0';//문자로 입력받은 수를 K로 변경
}
else if (ary[i] == ')') {
stk[top - 1] += rec[top] * stk[top];
stk[top--] = 0;//스택 반영
}
else {
++stk[top];//길이 증가
}
}
printf("%d", stk[0]);
}
|
cs |
반응형
'알고리즘 문제 > [백준]' 카테고리의 다른 글
[백준] 5670 휴대폰 자판 (0) | 2021.03.04 |
---|---|
[백준] 9020 골드바흐의 추측 (0) | 2021.03.04 |
[백준] 1937 욕심쟁이 판다 (0) | 2021.03.04 |
[백준] 1786 찾기 (0) | 2021.03.02 |
[백준] 1298 노트북의 주인을 찾아서 (0) | 2021.02.22 |