본문 바로가기

Programmers

2018 KAKAO BLIND [1차] 다트 게임

2018 KAKAO BLIND RECRUITMENT

C++ 작성

[1차] 다트 게임

https://programmers.co.kr/learn/courses/30/lessons/17682

 

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;
}