C++:: 프로그래머스 < [1차] 다트 게임 >

jahlee·2023년 7월 16일
0

프로그래머스_Lv.1

목록 보기
43/75
post-thumbnail

주어지는 조건에 맞게 점수를 계산해주면 되는 간단한 문제이다. sstream을 사용해서 인덱스를 생각하지 않고도 풀 수 있지만 해당 풀이는 인덱스를 사용하여 풀었다.

#include <string>
#include <vector>
#include <cmath>
using namespace std;

int solution(string dartResult) {
    vector<int> answer(3,0);
    int idx = 0;
    for (int i=0; i<dartResult.size(); i++) {
        if (isdigit(dartResult[i])) {// 일단 점수먼저 넣어준다.
            answer[idx++] = stoi(dartResult.substr(i));
            if (isdigit(dartResult[i+1])) i++;
        } 
    }
    for (int i=0, idx=0; i<dartResult.size(); i++) {
        if (dartResult[i] == 'S') {// 싱글일때
            idx++;
        } else if (dartResult[i] == 'D') {// 더블일때
            answer[idx] = pow(answer[idx], 2);
            idx++;
        } else if (dartResult[i] == 'T') {// 트리플일때
            answer[idx] = pow(answer[idx], 3);
            idx++;
        } else if (dartResult[i] == '*') {// * 일때
            for (int j=idx-1;j>=0 && j>=idx-2;j--) {// 바로 처음점수에 *이 따라오는 부분에 대한 처리를 잘해주자.
                answer[j] *= 2;
            }
        } else if (dartResult[i] == '#') {// # 일때
            answer[idx-1] *= -1;
        }
    }
    return answer[0] + answer[1] + answer[2];
}

0개의 댓글