알고리즘 연습/프로그래머스
[level 1]다트 게임
_h.j
2020. 7. 20. 12:42
728x90
https://programmers.co.kr/learn/courses/30/lessons/17682
첫 번째 풀이
#include <string>
#include <cctype>
using namespace std;
int solution(string dartResult) {
int answer = 0;
int tmp[3] = {0,0,0};
int level = -1;
for(int i =0 ; i< dartResult.length() ; i++){
if(isdigit(dartResult[i])!=0 || dartResult[i]-'0' == 0 ){ // 숫자면
level++;
tmp[level] = dartResult[i] -'0';
if(dartResult[i+1]-'0' == 0){
i++;
tmp[level] = tmp[level]*10 +dartResult[i] -'0';
}
}
else if(dartResult[i] =='*' ||dartResult[i] =='#' ){
if(dartResult[i] =='*'){
tmp[level] *=2;
if(level == 0 ) continue;
tmp[level-1] *=2;
}
else{
tmp[level] = tmp[level] * (-1);
}
}
else {
if(dartResult[i] == 'D'){
tmp[level] = tmp[level] *tmp[level] ;
}
else if(dartResult[i] == 'T'){
tmp[level] = tmp[level] *tmp[level]*tmp[level] ;
}
}
}
for(int i=0; i<3;i++)
answer += tmp[i];
return answer;
}
두 번째 풀이
#include <string>
using namespace std;
int solution(string dartResult) {
int answer = 0;
int step[3] = {0,0,0};
int i = 0,s=0;
while(i< dartResult.length()){
//숫자 파트
if(dartResult[i+1] >= '0' && dartResult[i+1]<='9'){
step[s] = (dartResult[i]-'0')*10 + dartResult[i+1]-'0';
i++;
}
else step[s] = dartResult[i]-'0';
i++;
//보너스
if(dartResult[i] == 'D')
step[s] = step[s]*step[s];
else if(dartResult[i] == 'T')
step[s] = step[s]*step[s]*step[s];
i++;
//옵션에서
if(dartResult[i] == '#') {step[s] = step[s]*(-1); i++;}
else if(dartResult[i] == '*'){
if(s-1 < 0) step[0]*=2;
else{
step[s]*=2;
step[s-1]*=2;
}
i++;
}
s++;
}
for(int elem : step){
answer +=elem;
}
return answer;
}
첫 번째나 두 번째나 모두 흐름은 같다.
isdigit은 0 판별 불가하니 '0','9'와 비교를 통해 숫자인지 확인 했다.
728x90