Programmers/Level 1
C++ / 프로그래머스 / [1차] 다트 게임
GitHubSeob
2021. 9. 6. 01:37
문제
https://programmers.co.kr/learn/courses/30/lessons/17682
코딩테스트 연습 - [1차] 다트 게임
programmers.co.kr


문제풀이
다트를 총 세 번 던진다.
다트는 0점부터 10점까지 맞힐 수 있다.
S는 1 제곱, D는 2 제곱, T은 3 제곱이다.
상은 *또는 # 또는 없을 수도 있다.
*은 이전 값과 현재 값에 *2를 해준다.
#은 현재 값에 *-1을 해준다.
1. 숫자 먼저 분류해서 score벡터에 저장한다.
2. S, D, T를 구분하여 score에 제곱을 해준다.
3. 현재 값이 idx이고, *이 있다면, score[idx-1]과 score[idx] 값에 *2를 한다.
4. 현재 값이 idx이고, #이 있다면, score[idx]에 *-1을 한다.
5. score 원소 값을 합하여 return 한다.
코드
#include <string>
#include <vector>
#include <cmath>
using namespace std;
int solution(string dartResult) {
int idx = 0;
int answer = 0;
vector<int> score;
while (idx < dartResult.size()) {
if (dartResult[idx] == '1') {
if (dartResult[idx + 1] == '0') {
score.push_back(10);
++idx;
}
else score.push_back(1);
}
else score.push_back(dartResult[idx] - '0');
++idx;
if (dartResult[idx] == 'S')
score[score.size() - 1] = pow(score[score.size() - 1], 1);
else if (dartResult[idx] == 'D')
score[score.size() - 1] = pow(score[score.size() - 1], 2);
else if (dartResult[idx] == 'T')
score[score.size() - 1] = pow(score[score.size() - 1], 3);
++idx;
if (dartResult[idx] == '*') {
score[score.size() - 1] *= 2;
score[score.size() - 2] *= 2;
++idx;
}
else if (dartResult[idx] == '#') {
score[score.size() - 1] *= -1;
++idx;
}
}
for (idx = 0; idx < score.size(); ++idx)
answer += score[idx];
return answer;
}