GitHubSeob
C++ / 프로그래머스 / [1차] 다트 게임 본문
문제
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;
}
'Programmers > Level 1' 카테고리의 다른 글
C++ / 프로그래머스 / 문자열 내 마음대로 정렬하기 (0) | 2021.09.06 |
---|---|
C++ / 프로그래머스 / 두 정수 사이의 합 (0) | 2021.09.06 |
C++ / 프로그래머스 / [1차] 비밀지도 (0) | 2021.08.30 |
C++ / 프로그래머스 / 나누어 떨어지는 숫자 배열 (0) | 2021.08.28 |
C++ / 프로그래머스 / 같은 숫자는 싫어 (0) | 2021.08.28 |