[프로그래머스 Lv1] [1차] 다트게임

수민이슈·2023년 4월 21일
0

[C++] 코딩테스트

목록 보기
20/116
post-thumbnail

🖊️ 문제

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

🖊️ 풀이

개 단순한 구현형 코드..
예외사항을 잘 체크하자.
내가 걸린 예외는 그냥 isdigit()로 숫자 더해버려서
10은 1 0 으로 나뉘어버렸다.
정신을 차려보도록 하자
제시된 조건을 잘 읽자.

🖊️ 코드

#include <string>
#include <vector>
#include <cmath>

using namespace std;

int solution(string dartResult) {
    int answer = 0;
    vector<int> scores;
    int scoreCnt = -1;
    string tempScore = "";
    
    for (int i = 0 ; i < dartResult.length() ; i++) {
        if (isdigit(dartResult[i])) {
            tempScore += dartResult[i];
        }
        else if (!tempScore.empty()) {
                scores.emplace_back(stoi(tempScore));
                tempScore = "";
                scoreCnt++;
        }
        if (dartResult[i] == 'D') scores[scoreCnt] = pow(scores[scoreCnt], 2);
        else if (dartResult[i] == 'T') scores[scoreCnt] = pow(scores[scoreCnt], 3);
        else if (dartResult[i] == '#') scores[scoreCnt] *= -1;
        else if (dartResult[i] == '*') {
            scores[scoreCnt] *= 2;
            if (scoreCnt > 0) scores[scoreCnt-1] *= 2;
        }
    }
        
    for (auto& s : scores) {
        answer += s;
    }
    
    return answer;
}

0개의 댓글