알고리즘/문제풀이

다음에 올 숫자 - 프로그래머스 feat: javascript

3일마다 작심3일 2023. 4. 19. 23:20

테스트 코드 작성

const { nextNumber } = require("./nextNumber");

test("test nextNumber function", () => {
  // 등차수열 테스트
  expect(nextNumber([1, 3, 5])).toBe(7);
  expect(nextNumber([3, 6, 9, 12])).toBe(15);
  expect(nextNumber([-5, -2, 1, 4, 7])).toBe(10);

  // 등비수열 테스트
  expect(nextNumber([2, 4, 8])).toBe(16);
  expect(nextNumber([1, 2, 4, 8])).toBe(16);
  expect(nextNumber([4, 12, 36])).toBe(108);
});

 

 

이번엔 음.. 굳이굳이 한글 코딩을 해봤다.

아무래도 등차수열같은 단어는 영어로 작성하기 힘들었는데 코딩테스트에서 굳이 가독성만 괜찮으면 되는건데 한글로 변수명을 지으면 안되나? 라는 생각이 들었다.

변수명을 신경써서 짓는 이유는 팀원들간에 혹은 나를 위한 가독성을 위함이고 아무튼.. 등차수열같은 어려운 변수명은 차라리 한글로 변수명을 짓는게 나을거라 생각해서 시도해봤다.

 

원래 계획은 프로그래머스 레벨테스트 단계를 계속 문제풀이하는거였는데 생각보다 시간을 너무 많이 잡아먹어서 하루에 1개씩 코딩테스트 문제를 풀이하려면 재미를 위해 혹은 순서를 밟기위해 0단계부터 매일 한 문제씩 문제풀이를 하려고한다.

 

그래서인지 굳이 어려운 알고리즘에 대한 지식을 사용하지 않고 일반적으로 문제 풀듯이 풀었는데

이게 프로그래머스에서 의도한 알고리즘인지는 잘 모르겠다.

 

function nextNumber(common) {
  let answer;
  const is등차수열 = () => {
    return (
      common[1] - common[0] === common[common.length - 1] - common[common.length - 2]
    );
  };

  if (is등차수열()) {
    let diffrentOfNumber =
      common[common.length - 1] - common[common.length - 2];
    answer = common[common.length - 1] + diffrentOfNumber;
  } else {
    let ratio = common[common.length - 1] / common[common.length - 2];
    answer = common[common.length - 1] * ratio;
  }

  return answer;
}

module.exports = { nextNumber };