문제 링크:
입출력:
TC# | 입력 | 출력 |
1 | 1S2D*3T | 37 |
2 | 1D2S#10S | 9 |
3 | 1D2S0T | 3 |
4 | 1S*2T*3S | 23 |
5 | 1D#2S*3S | 5 |
6 | 1T2D3D# | -4 |
7 | 1D2S3T* | 59 |
코드:
/* 1. 자기 자신에 대한 곱셈을 두번 하면 세제곱이 아니라 네제곱! */
#include <iostream>
#include <string>
#include <vector>
using namespace std;
string in;
int scr[3] = { -1, -1, -1 };
char bns[3], opt[3];
int ans;
int main() {
ios_base::sync_with_stdio(0); cin.tie(0);
cin >> in;
int i = 0;
for (auto ch : in) {
if ('0' <= ch && ch <= '9') {
if (bns[i] != 0) {
scr[++i] = ch - '0';
}
else {
switch (scr[i]) {
case 1: scr[i] = 10; break;
case -1: scr[i] = ch - '0'; break;
}
}
}
else {
switch (ch) {
case 'S': case 'D': case 'T': bns[i] = ch; break;
case '*': case '#': opt[i] = ch; break;
}
}
}
for (int i = 0; i < 3; ++i) {
switch (bns[i]) {
case 'D': scr[i] *= scr[i]; break;
case 'T': scr[i] *= scr[i] * scr[i]; break;
}
switch (opt[i]) {
case '*':
if(i > 0)
scr[i - 1] *= 2;
scr[i] *= 2; break;
case '#':
scr[i] *= -1; break;
}
}
for (auto s : scr)
ans += s;
cout << ans;
return 0;
}