2018 KAKAO BLIND RECRUITMENT
C++ 작성
[1차] 다트 게임
1) 조건에 따라 코드를 작성하는 시뮬레이션 문제이다.
2) 점수가 0~10 사이로 주어진다고 했으므로
10점일 경우의 처리는, 숫자 입력 후 다음 문자가 '0'이면 score를 10으로 만들었다.
3) 이 문제의 포인트는 '*' 조건에서 이전 점수까지 고려해서 계산하는 것.
한 세트를 계산했을 때 -> 이전 점수(완전히 점수가 확정됨)를 answer에 더해 준다.
그리고 반복문을 빠져나와 answer를 return하기 전에 가장 마지막 점수를 더해 준다. -> 이전 점수만 answer에 더했기 때문에 마지막 점수가 더해지지 않았으므로
4) 예를 들어 4세트의 이 있을 때,
1세트 끝난 후 -> 더하지 않음 (preScore를 더하지만 preScore=0)
2세트 끝난 후 -> 점수 계산이 끝난 1세트를 answer에 더함
3세트 끝난 후 -> 점수 계산이 끝난 2세트를 answer에 더함
4세트 끝난 후 -> 점수 계산이 끝난 3세트를 answer에 더함
---
반복문 종료 후, 4세트의 점수를 더해서 return 한다.
#include <string>
using namespace std;
int solution(string dartResult) {
int answer = 0;
int len = dartResult.length();
int cur = 0;
int preScore = 0;
int score = 0;
while(cur < len){
// 점수
if('0'<=dartResult[cur] && dartResult[cur]<='9')
score = dartResult[cur] - '0';
if(dartResult[cur+1]=='0'){
score = 10;
cur+=1;
}
cur+=1;
// 보너스
if(dartResult[cur]=='S'){
}
else if(dartResult[cur]=='D'){
score = score*score;
}
else { // T
score = score*score*score;
}
cur+=1;
// 옵션
if(dartResult[cur]=='*' || dartResult[cur]=='#'){
if(dartResult[cur]=='*'){
if(preScore!=0) preScore *= 2;
score*=2;
}
else{ // '#'
score = -score;
}
cur+=1;
}
answer += preScore;
preScore = score;
}
answer += score;
return answer;
}