[1차] 다트 게임

2020.07.29

const isNum = (char) => !isNaN(parseInt(char));

const solution = (dartResult) => {
  const limit = dartResult.length;
  // i < dartResult.length와 같이 설정하면 매번 length를 계산하기 때문에 비효율적이라고 한다.
  const arr = [];
  let point;
  for (let i = 0; i < limit; i++) {
    const current = dartResult[i];
    if (isNum(current)) {
      if (isNum(dartResult[i + 1])) {
        point = 10;
        i++;
        continue;
      }
      point = parseInt(current);
      continue;
    }
    if (current == "S") {
      if (i == limit - 1) {
        arr.push(point);
        break;
      }
      if (isNum(dartResult[i + 1])) {
        arr.push(point);
      }
      continue;
    }
    if (current == "D") {
      point = point ** 2;
      if (i == limit - 1) {
        arr.push(point);
        break;
      }
      if (isNum(dartResult[i + 1])) {
        arr.push(point);
      }
      continue;
    }
    if (current == "T") {
      point = point ** 3;
      if (i == limit - 1) {
        arr.push(point);
        break;
      }
      if (isNum(dartResult[i + 1])) {
        arr.push(point);
      }
      continue;
    }
    if (current == "#") {
      point *= -1;
      arr.push(point);
      continue;
    }
    if (current == "*") {
      const previous = arr[arr.length - 1];
      if (previous) {
        arr[arr.length - 1] *= 2;
      }
      point *= 2;
      arr.push(point);
      continue;
    }
  }
  return arr.reduce((acc, current) => acc + current);
};
  • 도저히 함수형으로 답이 안 나와서 명령형으로 풀었더니...

  • 이 문제는 정규표현식을 쓰냐 안 쓰냐가 너무 차이날 거 같은데 정규표현식을 공부를 해야 되나 ㅠ

0개의 댓글