N
(프로그래머스 c++ KAKAO)다트 게임 본문
string 형태로 점수가 들어온다.
가장 크게 분리해야 할 것은
1) 숫자
2) 알파벳('S', 'D', 'T')
3) 보너스('*', '#')
로 분리를 하여 점수를 합산해야 한다.
score는 현재 처리하고 있는 점수, prev는 보너스 점수를 처리하기 위해 이전 점수를 저장한 변수이다.
1) 숫자
숫자는 0 ~ 10 사이의 점수로 dartResult[i] 번째에 있는 문자가 0 ~ 9 사이인지 판별한다.
그리고 dartResult[i + 1]이 0이면 점수는 10점이 되므로 score에 10을 저장 후 i++,
아니라면 0 ~ 9 에 해당하는 점수를 score에 저장한다.
2)알파벳('S', 'D', 'T)
dartResult[i] 가 'S' or 'D' or 'T' 인지 판단한다.
'S'는 score에 1승이니 굳이 해줄 필요가 없다.
'D'는 score에 2승이니 pow(score, 2)를 score에 저장.
'T'는 score에 3승이니 pow(score, 3)을 score에 저장한다.
3)보너스('*', '#')
'*'과 '#'를 판단하는 부분은 2번에서 score를 저장한 후 해당 if문에서 처리한다.
dartResult[i + 1]이 '*'이면 answer -= prev를 해주어 이전 점수를 제거한다.
그리고 prev와 score에 * 2를 해주어 answer에 저장하고 i++을 해준다.
dartResult[i + 1]이 '#'이면 score에 -1을 곱해주어 음수로 변환하고 asnwer에 더해준다.
마찬가지로 i++을 해준다..!
for문을 모두 돌게 되면 총 점수를 구할 수 있다..!
1단계는 직관적으로 문제를 풀면 거의 다 풀 수 있는 문제같다..!
#include <string>
#include <cmath>
#include <iostream>
using namespace std;
int solution(string dartResult) {
int answer = 0;
int prev = 0, score = 0;
for(int i = 0; i < dartResult.size(); i++)
{
if(dartResult[i] >= '0' && dartResult[i] <= '9')
{
prev = score;
if(dartResult[i + 1] == '0')
{
score = 10;
i++;
}
else
score = dartResult[i] - '0';
}
else if(dartResult[i] == 'S' || dartResult[i] == 'D' || dartResult[i] == 'T')
{
if(dartResult[i] == 'D')
score = pow(score, 2);
else if(dartResult[i] == 'T')
score = pow(score, 3);
if(dartResult[i + 1] == '*')
{
answer -= prev;
prev *= 2;
score *= 2;
i++;
answer += prev;
}
else if(dartResult[i + 1] == '#')
{
score *= -1;
i++;
}
answer += score;
}
}
return answer;
}
'프로그래머스 알고리즘 > KAKAO' 카테고리의 다른 글
(프로그래머스 c++ KAKAO)카카오 프렌즈 컬러링북 (3) | 2020.05.08 |
---|---|
(프로그래머스 c++ KAKAO)문자열 압축 (0) | 2020.05.06 |
(프로그래머스 c++ KAKAO)실패율 (0) | 2020.04.30 |
(프로그래머스 c++ KAKAO)[1차]비밀지도 (0) | 2020.04.30 |
(프로그래머스 c++ KAKAO) 1단계- 크레인 인형뽑기 (1) | 2020.04.14 |