< C++ >
#include <string>
#include <cmath>
using namespace std;
int solution(string dartResult) {
int answer = 0;
int score = 0, prev = 0;
for(int i=0; i<dartResult.length(); i++) {
char tmp = dartResult[i];
if(tmp >= '0' && tmp <= '9') {
prev = score;
if(dartResult[i+1] == '0') {
score = 10;
i++;
}
else {
score = tmp - '0';
}
}
else if(tmp == 'S' || tmp == 'D' || tmp == 'T') {
if(tmp == 'D') {
score = pow(score, 2);
}
if(tmp == 'T') {
score = pow(score, 3);
}
if(dartResult[i+1] == '*') {
// prev 2배
// answer에 이미 prev가 더해져있기 때문에 한번만 더해주면 됨
answer += prev;
score *= 2;
i++;
}
if(dartResult[i+1] == '#') {
score = -score;
i++;
}
answer += score;
}
}
return answer;
}
< JS >
function solution(dartResult) {
const BONUS = { S: 1, D: 2, T: 3 };
const OPTION = { '#': -1, '*': 2 };
let [prevScore, score] = [0, 0];
let answer = 0;
for (let i = 0; i < dartResult.length; i += 1) {
const DART = dartResult[i];
if ('0' <= DART && DART <= '9') {
prevScore = score;
// 점수가 10점일때
if (dartResult[i + 1] === '0') {
score = 10;
i += 1;
}
else score = parseInt(DART);
}
// bonus
else if (DART === 'S' || DART === 'D' || DART === 'T') {
score = score ** BONUS[DART];
// option
if(dartResult[i + 1] === '*' || dartResult[i + 1] === '#') {
if (dartResult[i + 1] === '*') {
// 이미 answer에 더해져있기 때문에 한번만 더함
answer += prevScore;
}
score *= OPTION[dartResult[i + 1]];
i += 1;
}
answer += score;
}
}
return answer;
}
'PS > Programmers' 카테고리의 다른 글
Programmers / Level 2 / 가장 큰 수 / C++ (0) | 2022.01.07 |
---|---|
Programmers / Level 1 / [1차] 비밀지도 / C++ (0) | 2022.01.06 |
Programmers / Level 1 / 이상한 문자 만들기 / C++ (0) | 2021.11.20 |
Programmers / Level 1 / 최소직사각형 / C++ (0) | 2021.11.13 |