다음에 올 숫자

이종현·2024년 1월 19일
0

코딩테스트

목록 보기
20/24
post-thumbnail

문제 설명

등차수열 혹은 등비수열 common이 매개변수로 주어질 때, 마지막 원소 다음으로 올 숫자를 return 하도록 solution 함수를 완성해보세요.


제한사항

  • 2 < common의 길이 < 1,000
  • 1,000 < common의 원소 < 2,000
    • common의 원소는 모두 정수입니다.
  • 등차수열 혹은 등비수열이 아닌 경우는 없습니다.
  • 등비수열인 경우 공비는 0이 아닌 정수입니다.

입출력 예

commonresult
[1, 2, 3, 4]5
[2, 4, 8]16

1. 문제 이해

  • 등차인지 등비인지를 먼저 판별하고 그에 맞춰서 다음에 올 숫자를 알아낸다.
  • input은 10^3 이기 때문에 시간복잡도는 문제없어 보인다.
  • 등차 혹은 등비인지를 판별하기 때문에 common 배열의 요소는 3개 이상 주어질거라고 예상한다.

2. 접근 방법

  • 직관적으로 생각하기
    • common 배열의 인덱스1번과 0번의 차이와 2번과 1번의 차이가 같은지를 먼저 체크한다.
    • 이때 다르다면, 인덱스1번과 0번을 나눈 값과 2번과 1번을 나눈 값이 같은지를 체크한다.
    • 등비 혹은 등차가 반드시 된다고 했기 때문에 등차일때는 가장 마지막 인덱스에 등차만큼을 더해서 값을 구하고 등비일때는 가장 마지막 인덱스에 등비만큼을 곱해서 값을 리턴한다.

3. 코드 설계

  • 직관적으로 생각하기
    • const arithmeticSeq = common[1] - common[0] === common[2] - common[1] ? common[1] - common[0] : null
    • const geometricSeq = common[1] / common[0] === common[2] / common[1] ? common[1] / common[0] : null
    • if(arithmeticSeq) return common[length - 1] + arithmeticSeq
    • if(geometricSeq) return common[length - 1] * geometricSeq

4. 코드 구현

function solution(common) {
  const [a, b, c] = common.slice(0, 3)

  if (b - a === c - b) {
    return common.pop() + b - a
  } else {
    return common.pop() * (b / a)
  }
}
profile
데이터리터러시를 중요하게 생각하는 프론트엔드 개발자

0개의 댓글