본문 바로가기
카테고리 없음

[프로그래머스 Lv.1] [1차] 다트게임 javascript

by 어느새벽 2024. 12. 11.
function solution(scoreStr) {
  const scores = []; // 각 세트의 점수를 저장할 배열
  const regex = /(\d{1,2})([SDT])([*#]?)/g; // 점수, 보너스, 옵션 추출하는 정규표현식
  let match;

  // 입력된 문자열에서 각 세트를 추출
  while ((match = regex.exec(scoreStr)) !== null) {
    let [_, point, bonus, option] = match; // 추출된 점수, 보너스, 옵션
    let score = Number(point); // 점수를 숫자로 변환

    // 보너스(S, D, T)에 따른 점수 제곱 적용
    if (bonus === 'S') score **= 1; // Single → 1제곱
    else if (bonus === 'D') score **= 2; // Double → 2제곱
    else if (bonus === 'T') score **= 3; // Triple → 3제곱

    // 옵션 처리
    if (option === '*') {
      score *= 2; // 현재 점수를 2배로
      if (scores.length > 0) {
        // 직전 점수도 2배로 만든다.
        scores[scores.length - 1] *= 2;
      }
    } else if (option === '#') {
      score *= -1; // 현재 점수를 음수로
    }

    // 계산된 점수를 배열에 추가
    scores.push(score);
  }

  // 최종 점수 합산
  return scores.reduce((total, curr) => total + curr, 0);
}

 

어려워서 나중에 다시 풀어봐야할 것 같다.