프로그래머스
score = 10을 할당한다. i++ 해준다. continuescore = Number(dartResult[i])를 할당한다. D, T라면 각각 값을 제곱, 세제곱한다. *이고 scores에 값이 있다면, scores의 마지막 값과 자신을 2배로 만든다.#이라면, 자신을 음수로 만든다. function solution(dartResult){
  const scores = [];
  let score = 0;
  for(let i=0; i<dartResult.length; i++){
    if(Number.isInteger(Number(dartResult[i]))){
      if(Number.isInteger(Number(dartResult[i+1]))){
        scores.push(score);
        score = 10;
        i++;
        continue;
      }
      scores.push(score);
      score = Number(dartResult[i]);
    }
    else if(dartResult[i] === 'D') score = Math.pow(score,2);
    else if(dartResult[i] === 'T') score = Math.pow(score,3);
    else if(dartResult[i] === '*'){
      const len = scores.length;
      if(len>0){
        scores[len-1] = scores[len-1]*2;
      }
      score *= 2;
    }
    else if(dartResult[i] === '#'){
      score *= -1;
    }
  }
  scores.push(score);
  return scores.reduce((acc,cur) => {
    return acc + cur;
  },0)
}
간단한 것처럼 보였지만, 값이 숫자인 경우와 *인 경우가 조금 복잡했다.
값이 숫자인 경우, Number(값)으로만 했을때에는 값이 0일때 조건이 false가 되는 문제가 있었다. 따라서, Number.isInteger(Number(값))을 사용해서 숫자로 변환한 값이 정수인지 확인해주었다. 
숫자가 10인 경우는 이전 라운드에서 획득한 점수 또는 0 (첫 판인 경우)을 score에 push해주고 이번판 점수를 10으로 할당한 뒤, i++를 해주고 continue를 해주면, i+2된 값부터 다시 확인하기 시작한다.
스타상 *인 경우, scores 배열에 이미 값(전 라운드에서 획득한 점수)이 있다면 배열의 마지막 값을 2배로 만들어주고, 이번 라운드에서 획득한 점수를 2배로 만들어준다. scores 배열에 값이 없다면, 첫 판이라는 뜻이므로, 이번 라운드에서 획득한 점수만 2배로 만들어준다. 
반복문이 모두 끝나면, 마지막 라운드에서 획득한 점수는 배열에 추가되지 않았으므로, scores에 push해준다.