반응형
풀이 )
문자열을 앞에서부터 한 문자씩 읽는다.
숫자 3개를 저장할 배열을 만들고 숫자가 나올때마다 인덱스를 늘려 각 배열에 넣는다.
1이 오는 경우 뒤에 0이 와서 10이 되는 경우가 있기 때문에 뒤에 0이 오는지 확인하고 0이 오면 배열에 10을 저장하고 문자열에서 한 문자만큼 더 이동시킨다.
S D T에 대해서, S가 오는 경우 건너뛰고, D가 오는 경우 제곱, T가 오는 경우 세제곱해준다.
#이 오는 경우 해당 숫자에 -1을 곱하고, 마지막으로 *이 오는 경우 가장 앞에 오는 경우가 아니면 앞 숫자까지 2를 곱해준다.
마지막으로 배열에 저장된 3개의 값을 더해주어 답을 구한다.
#include <string>
#include <iostream>
using namespace std;
int solution(string dartResult) {
int answer = 0;
int score[3] = {0, };
int len = dartResult.size();
int idx_score = -1;
for(int i = 0; i < len; ++i){
if(dartResult[i] == '1'){
idx_score++;
if(dartResult[i+1] == '0'){
score[idx_score] = 10;
i++;
}
else{
score[idx_score] = 1;
}
}
else if('0' <= dartResult[i] && dartResult[i] <= '9'){
idx_score++;
score[idx_score] = dartResult[i]-'0';
}
else if(dartResult[i] == 'S')
continue;
else if(dartResult[i] == 'D')
score[idx_score] *= score[idx_score];
else if(dartResult[i] == 'T')
score[idx_score] *= score[idx_score] * score[idx_score];
else if(dartResult[i] == '#')
score[idx_score] *= -1;
else{
if(idx_score > 0){
score[idx_score-1] *= 2;
}
score[idx_score] *= 2;
}
}
answer = score[0] + score[1] + score[2];
return answer;
}
주의점 )
- 10이 나오는 경우
반응형
'문제풀이 > 프로그래머스' 카테고리의 다른 글
[C++] 프로그래머스(Level 1) - 키패드 누르기 (0) | 2020.12.09 |
---|---|
[C++] 프로그래머스(Level 1) - [1차] 비밀지도 (0) | 2020.12.09 |
[C++] 프로그래머스(Level 1) - 모의고사 (0) | 2020.11.03 |
[C++] 프로그래머스(Level 1) - 실패율 (0) | 2020.10.29 |
[C++] 프로그래머스(Level 1) - 크레인 인형뽑기 게임 (0) | 2020.10.29 |