52. 프로그래머스(1단계) - 다트게임

성훈·2021년 9월 9일
0

Algorithm

목록 보기
52/61
post-thumbnail

📌 문제의 조건

📌 풀이

풀이 👨‍💻

function solution(dartResult) {
  let curNum = 0,
    newArr = [],
    numArr = [],
    signArr = new Array(3).fill("");

  for (let i = 0; i < dartResult.length; i++) {
    if (dartResult[i] === "1" && dartResult[i + 1] === "0") {
      newArr.push("10");
      i++;
    } else {
      newArr.push(dartResult[i]);
    }
  }

  newArr.reduce((acc, cur, idx) => {
    if (/\d/.test(cur)) {
      curNum = Number(cur);
      return acc;
    } else if (/[A-Z]/.test(cur)) {
      if (cur === "S") {
        numArr.push(curNum);
      } else if (cur === "D") {
        numArr.push(Math.pow(curNum, 2));
      } else {
        numArr.push(Math.pow(curNum, 3));
      }
    } else {
      if (idx === 2) {
        signArr[0] = cur;
      } else if (idx === 4 || idx === 5) {
        signArr[1] = cur;
      } else {
        signArr[2] = cur;
      }
    }
  }, 0);
  
  for (let i = 0; i < 3; i++) {
    if (signArr[i] === "*") {
      numArr[i] *= 2;
      if (i !== 0) {
        numArr[i - 1] *= 2;
      }
    } else if (signArr[i] === "#") {
      numArr[i] *= -1;
    }
  }
  return numArr.reduce((acc, cur) => acc + cur, 0);
}

📌 리뷰

되게 가볍게 접근했는데 너무 돌아온 것 같다.
계산된 점수 배열과 기호 배열을 구한다음 기호 배열에 맞춰서 총합을 반환하는 방식이다.

📌 문제 출처

출처: 프로그래머스 코딩 테스트 연습,

https://programmers.co.kr/learn/challenges#

profile
어떻게 이걸 풀어낼 수 있을까

0개의 댓글