코딩 공부 4
문제
설명
-
“점수 보너스 옵션”으로 이루어진 입력 값에서 총 점수 계산하는 문제
코드
#include <string>
#include <vector>
#include <ctype.h>
using namespace std;
int getBonus(char c) {
if (c == 'S')
return 1;
if (c == 'D')
return 2;
return 3;
}
int getOption(char c) {
if (c == '*')
return 2;
else
return -1;
}
int solution(string dartResult) {
int answer = 0;
int i = 0;
// 1, 2, 3회의 점수, 보너스, 옵션 계산
int firstS = stoi(dartResult.substr(i++, 1));
if (isdigit(dartResult.at(i))) {
firstS = 10;
i++;
}
int firstB = getBonus(dartResult.at(i++));
int firstO = 1;
if (!isdigit(dartResult.at(i))) {
firstO = getOption(dartResult.at(i++));
}
int secondS = stoi(dartResult.substr(i++, 1));
if (isdigit(dartResult.at(i))) {
secondS = 10;
i++;
}
int secondB = getBonus(dartResult.at(i++));
int secondO = 1;
if (!isdigit(dartResult.at(i))) {
secondO = getOption(dartResult.at(i++));
if (secondO == 2) {
firstO *= 2;
}
}
int thirdS = stoi(dartResult.substr(i++, 1));
if (isdigit(dartResult.at(i))) {
thirdS = 10;
i++;
}
int thirdB = getBonus(dartResult.at(i++));
int thirdO = 1;
if (i < dartResult.size()) {
thirdO = getOption(dartResult.at(i));
if (thirdO == 2) {
secondO *= 2;
}
}
// 총 점수 계산
int tmp = firstS;
for (int i = 1; i < firstB; i++) {
tmp *= firstS;
}
tmp *= firstO;
answer += tmp;
tmp = secondS;
for (int i = 1; i < secondB; i++) {
tmp *= secondS;
}
tmp *= secondO;
answer += tmp;
tmp = thirdS;
for (int i = 1; i < thirdB; i++) {
tmp *= thirdS;
}
tmp *= thirdO;
answer += tmp;
return answer;
}
공유하기
Twitter Facebook LinkedIn댓글을 남기시려면 Github 로그인을 해주세요