문제가 길지만 요약하자면
숫자- 점수를 받고
영어- 점수를 계산
* / # - 보너스 점수
이여서 string을 순회하면서 이 점을 체크해주면 된다.
*일때는 해당 점수와 바로 전의 점수를 2배 해주면 되고 #일 때는 마이너스로 만들어 주면 되는데 이 것은 영어가 나올 때 * #이 있는 지 확인해서 있다면 적용해주는 방식으로 하면 된다.
#include <string>
#include <cmath>
using namespace std;
int solution(string dartResult) {
int answer = 0;
int prev=0,score=0;
for(int i=0;i<dartResult.size();i++)
{
//숫자 분리
if(dartResult[i]>='0' && dartResult[i]<='9')
{
prev=score; //보너스 계산을 위해
if(dartResult[i+1]=='0')
{
score=10;
i++;
}else{
score=dartResult[i]-'0';
}
}else if(dartResult[i]=='S' || dartResult[i]=='D' || dartResult[i]=='T')
{
if(dartResult[i]=='D'){
score=pow(score,2);
}else if(dartResult[i]=='T'){
score=pow(score,3);
}
if(dartResult[i+1]=='*')
{ //보너스 점수 계산
answer-=prev;
prev*=2;
score*=2;
i++;
answer+=prev;
}else if(dartResult[i+1]=='#'){
score*=-1;
i++;
}
answer+=score;
}
}
return answer;
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][LV 1][C++] 완주하지 못한 선수 (0) | 2024.03.06 |
---|---|
[프로그래머스][LV 1][C++] 체육 (3) | 2024.03.05 |
[프로그래머스][LV 1][C++] 실패율 (0) | 2024.03.04 |
[프로그래머스][LV 1][C++] 소수 찾기 (0) | 2024.03.04 |
[프로그래머스][LV 1][C++] 소수 만들기 (0) | 2024.03.01 |