해설
인덱스를 고려할 필요 없이 문자열의 원소만 판단하여 각 로직을 처리할 수 있다.
원소가 S, D, T가 들어온 경우, 그동안 계산해놓은 점수에 제곱(세제곱)을 하여 배열에 추가한다.
옵셥 *가 들어온 경우, 가장 최근의 두 원소에 2배를, 옵션 #가 들어온 경우 가장 최근의 원소에 -1배를 계산한다.
마지막으로 배열의 모든 원소의 합을 리턴한다.
전체 코드
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <tuple>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <climits>
#include <set>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <string>
#include <sstream>
#include <numeric>
#include <iostream>
using namespace std;
using ii = pair<int, int>;
using iii = tuple<int, int, int>;
#define X first
#define Y second
int solution(string s) {
vector<int> v;
int num = 0;
for (auto c : s) {
if ('0' <= c && c <= '9') num = num*10+c-'0'; //숫자계산
else if (c == 'S') {v.push_back(num); num = 0;} //기본 숫자 추가
else if (c == 'D') {v.push_back(num*num); num = 0;} //숫자를 제곱하여 추가
else if (c == 'T') {v.push_back(num*num*num); num = 0;} //숫자를 세제곱하여 추가
else if (c == '*') { //가장 최근의 두 점수에 x2
int sz = v.size();
v[sz-1] *= 2;
if (sz >= 2) v[sz-2] *= 2;
}
else if (c == '#') v.back() *= -1; //가장 최근의 점수 마이너스로 변환
}
return accumulate(v.begin(), v.end(), 0);
}
'대딩 > 프로그래머스풀이' 카테고리의 다른 글
[프로그래머스 lv2] [3차]압축 풀이 (0) | 2022.03.21 |
---|---|
[프로그래머스 lv2] 방금그곡 풀이 (0) | 2022.03.21 |
[프로그래머스 lv1] [1차]비밀지도 풀이 (0) | 2022.03.20 |
[프로그래머스 lv2] [1차]프렌즈4블록 풀이 (0) | 2022.03.20 |
[프로그래머스 lv2] 후보키 풀이 (0) | 2022.03.20 |
댓글