https://programmers.co.kr/learn/courses/30/lessons/17682
function solution(dartResult) {
let first=0;
let second=0;
let third=0;
let tmp=1;
//첫번째 숫자(숫자가 10인 경우도 고려해주기)
if(!isNaN(Number(dartResult[1]))){
first+=Number(dartResult[0]+dartResult[1]);
tmp+=1;
}
else first+=Number(dartResult[0]);
for(let i=tmp; i<dartResult.length; i++){
if(!isNaN(Number(dartResult[i]))){
tmp=i;
break;
}
//else if(dartResult[i]==='S') first=first;
else if(dartResult[i]==='D') first=Math.pow(first, 2);
else if(dartResult[i]==='T') first=Math.pow(first, 3);
else if(dartResult[i]==='*') first*=2;
else if(dartResult[i]==='#') first*=-1;
}
//두번째 숫자
if(!isNaN(Number(dartResult[tmp+1]))){
second+=Number(dartResult[tmp]+dartResult[tmp+1]);
tmp+=1;
}
else second+=Number(dartResult[tmp]);
for(let i=tmp+1; i<dartResult.length; i++){
if(!isNaN(Number(dartResult[i]))){
tmp=i;
break;
}
//else if(dartResult[i]==='S') first=first;
else if(dartResult[i]==='D') second=Math.pow(second, 2);
else if(dartResult[i]==='T') second=Math.pow(second, 3);
else if(dartResult[i]==='*'){
first*=2;
second*=2;
}
else if(dartResult[i]==='#') second*=-1;
}
//세번째 숫자
if(!isNaN(Number(dartResult[tmp+1]))){
third+=Number(dartResult[tmp]+dartResult[tmp+1]);
tmp+=1;
}
else third+=Number(dartResult[tmp]);
for(let i=tmp+1; i<dartResult.length; i++){
if(!isNaN(Number(dartResult[i]))){
tmp=i;
break;
}
//else if(dartResult[i]==='S') first=first;
else if(dartResult[i]==='D') third=Math.pow(third, 2);
else if(dartResult[i]==='T') third=Math.pow(third, 3);
else if(dartResult[i]==='*'){
second*=2;
third*=2;
}
else if(dartResult[i]==='#') third*=-1;
}
return first+second+third;
}
정말 내가 할 수 있는 선에서, 조건 하나씩 줘가면서 풀었다. 결과는 정답! 내힘으로 푼 문제는 정말 기분 좋다😙 첨에 테케 두개가 틀리게 나와서 보니까 내가 제대로 예외처리 안해준 부분이 있어서 생긴 문제였다.
문제 풀이가 길어지더라도, 일단 풀리면 된다. (시간 복잡도 너무 커지지 않는 선에서!)
오늘 배운점: 코드가 길어진다고 겁먹지 말자. 시간복잡도가 길어지지 않는선에서, 코드의 가독성이 나쁘지 않은 선에서, 문제를 풀 수 있다면 코드가 길어지는 것은 괜찮다. 지금 단계에서는 코드 길이보다 일단 문제 풀이에 신경쓰자!
*정규표현식으로 풀어보기
10/26