230222 프로그래머스 우박수열 정적분

샨티(shanti)·2023년 2월 21일
0

코딩테스트

목록 보기
35/35
post-custom-banner

매일 매일 하루 한 문제씩.
꾸준히 이어가는 코딩테스트 풀이 기록 ✅

프로그래머스 우박수열 정적분 자바스크립트.

거의 1시간을 디버깅에 쏟은 것 같은데, 오히려 잘됐다 싶었다.
비록 자바 언어로 풀지는 못했지만 정적분이라 하여 괜시리 쫄 필요 없다는 생각도 들었고,
어쨌든 자꾸 시간초과가 될 것 같은 코드라도 한번 더 생각해서 쳐보자는게 목표이므로.


문제 링크

우박수열 정적분


JavaScript

분명히 테스트 케이스는 통과했는데 실행해보니 놀랍게도 테스트 케이스'만' 통과하는 코드를 짬.
뭐지? 싶어서 계속 살펴봤는데 뭘 잘못했는지 몰라 근 한시간 동안 디버깅만 한 것 같다.

다 포기하고 걍 때려쳐!! 할 무렵 눈에 들어온 잘못된 변수 하나...ㅎ....

오프셋이니 정적분이니 움찔하는 단어들 때문에 약간 쫄긴 했고,
너무 시간이 오래 걸려 다른 사람들의 풀이를 봤는데 영 이해가 안되었을 뿐더러 나와 같은 논리인데도 되는 사람들의 논리를 확인하고 나니 더더욱 디버깅을 해봐야겠다는 생각이 들었다.

어쨌든, 찐 정적분 느낌으로 푼 사람들의 풀이보다는 효율성이 낮은 코드 같지만 해결은 됐다.

function collatzArray(number) {
  const array = [];

  array.push(number);

  let inputNumber = number;

  while (true) {
    if (inputNumber % 2 === 0) {
      inputNumber /= 2;
      array.push(inputNumber);

      if (inputNumber === 1) {
        break;
      }
    }

    if (inputNumber % 2 !== 0) {
      inputNumber = inputNumber * 3 + 1;
      array.push(inputNumber);
    }
  }

  return array;
}

function calculateArea(collatzNumbers) {
  const array = [];

  for (let i = 1; i < collatzNumbers.length; i += 1) {
    const area = (collatzNumbers[i - 1] + collatzNumbers[i]) / 2;
    array.push(area);
  }

  return array;
}

function integral(number, areasArray, rangesArray) {
  const result = [];

  for (let i = 0; i < rangesArray.length; i += 1) {
    const picked = rangesArray[i];
    const start = picked[0];
    const end = areasArray.length + picked[1];

    if (end < start) {
      result.push(-1);
      continue;
    }

    if (end === start) {
      result.push(0);
      continue;
    }

    const slicedArray = areasArray.slice(start, end);

    result.push(slicedArray.reduce((pre, cur) => pre + cur, 0));
  }

  return result;
}

function solution(k, ranges) {
  const array = collatzArray(k);

  const areas = calculateArea(array);

  return integral(k, areas, ranges);
}

파이썬으로 코테 푸는 사람들이 많기도 하고 코테를 위해서 파이썬을 따로 배우는 사람들도 있는 것 같은데..
나중에 기회가 되면 파이썬도 좀 고려는 해보고 싶긴 하다.
하지만 자바스크립트도 완벽하게 할 수 없는 상태에서는 욕심데쓰.

profile
가벼운 사진, 그렇지 못한 글
post-custom-banner

0개의 댓글