kakasoo

[node.js] [1차]다트 게임 ( 프로그래머스 레벨1 ) 본문

프로그래밍/알고리즘 풀이

[node.js] [1차]다트 게임 ( 프로그래머스 레벨1 )

카카수(kakasoo) 2021. 6. 28. 15:46
반응형
// // 프로그래머스 레벨 1 2018 KAKAO BLIND RECRUITMENT > [1차]다트 게임을 풀었습니다.
let sum = [];

const split = (arr, char) => {
  arr = arr
    .map((el, i) => {
      if (el.indexOf(char) != -1) {
        return [
          el.substring(0, el.indexOf(char) + 1),
          el.substring(el.indexOf(char) + 1, el.length),
        ];
      } else return el;
    })
    .flat(Infinity)
    .filter((el) => !!el);
  return arr;
};

const calc = (str) => {
  let point = "";
  let square, option;

  for (let i = 0; i < str.length; i++) {
    if (!isNaN(str[i])) point += str[i];
    else if (str[i] === "#" || str[i] === "*") option = str[i];
    else square = str[i] === "S" ? 1 : str[i] === "D" ? 2 : 3;
  }

  sum.push(point ** square);
  if (option === "*") {
    sum[sum.length - 1] *= 2;
    sum[sum.length - 2] *= 2;
  }
  if (option === "#") {
    sum[sum.length - 1] *= -1;
  }
};

function solution(dartResult) {
  let answer = split([dartResult], "*");
  answer = split(answer, "*");
  answer = split(answer, "#");
  answer = split(answer, "#");
  answer = split(answer, "D");
  answer = split(answer, "D");
  answer = split(answer, "T");
  answer = split(answer, "T");
  answer = split(answer, "S");
  answer = split(answer, "S");

  answer = answer
    .map((el, i) => {
      if (answer[i + 1] === "#" || answer[i + 1] === "*") {
        el += answer[i + 1];
        answer[i + 1] = "";
        return el;
      }
      return el;
    })
    .filter((el) => !!el);

  answer.map((el) => calc(el));
  return sum.reduce((acc, cur) => acc + cur);
}

잘 풀었다고는 생각 안하는데 테스트 통과는 해서 올린다.

반응형