[C++로 풀이] 다트 게임⭐
카테고리: Programmers
태그: Coding Test Algorithm
📌 다트 게임
난이도 ⭐
🚀 문제
🚀 내 풀이 ⭕
#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
자리수들 조합해서 정수로 만드는 연산.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기