[C++로 풀이] 다트 게임⭐

Date:     Updated:

카테고리:

태그:

📌 다트 게임

난이도 ⭐

🚀 문제

image

image


🚀 내 풀이 ⭕

#include <string>
#include <vector>

using namespace std;

int pow(int base, int n)
{
    if (n == 0) return 1;
    return base * pow(base, n - 1);
}

int solution(string dartResult) {
    int answer = 0;
    vector<int> vec;

    int i = 0, num = 0;
    while (i < dartResult.length())
    {
        if (dartResult[i] == '1' && dartResult[i + 1] == '0')
        {
            num = 10;
            i += 2;
        }
        else
        {
            num = dartResult[i] - '0';
            i++;
        }
        
        if (dartResult[i] == 'S')
            vec.push_back(pow(num, 1));
        else if (dartResult[i] == 'D')
            vec.push_back(pow(num, 2));
        else if (dartResult[i] == 'T')
            vec.push_back(pow(num, 3));
        
        i++;

        if (i < dartResult.length())
        {
            int back = vec.size() - 1;
            if (dartResult[i] == '*')
            {
                vec[vec.size() - 1] *= 2;
                if ((vec.size() - 2) >= 0)
                    vec[vec.size() - 2] *= 2;
                i++;
            }
            else if (dartResult[i] == '#')
            {
                vec[vec.size() - 1] *= -1;
                i++;
            }
        }
    }

    for (auto& elem : vec)
        answer += elem;

    return answer;
}

길다 길어.. 사실 '0' ~ '10' 사이의 숫자 나오는동안만 정수로 변환해 저장해놓으면 됐을 것 같다. 제곱도 3승까지 밖에 없어서 pow 함수를 따로 만들 필요 없이 그냥 3 번 곱했어도 됐을 텐데!

  • *의 경우 그 전의 값도 2를 곱해주어야 하기 때문에 차례대로 저장하는 벡터가 필요하다.


🚀 메모

int sum = 0;
int num = 1023;

s += s * 10 + 1;  // 1
s += s * 10 + 0;  // 10
s += s * 10 + 2;  // 102
s += s * 10 + 3;  // 1023

자리수들 조합해서 정수로 만드는 연산.



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Programmers 카테고리 내 다른 글 보러가기

댓글 남기기