문제 설명
등차수열 혹은 등비수열 common
이 매개변수로 주어질 때, 마지막 원소 다음으로 올 숫자를 return 하도록 solution 함수를 완성해보세요.
제한사항
- 2 <
common
의 길이 < 1,000
- 1,000 <
common
의 원소 < 2,000
- 등차수열 혹은 등비수열이 아닌 경우는 없습니다.
- 등비수열인 경우 공비는 0이 아닌 정수입니다.
입출력 예
common | result |
---|
[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)
}
}