[ 1, 2, 7 ] 배열이 주어졌을 때
초항 a : 1
공차 d : 2
등차수열로 만들어 질 수 있는지 확인할 값 n : 7
n의 항: f(4) = 7
결과 : index = 4
기존 점화식 코드
a : 초항
d : 공차
n : 반복문 횟수
=> 3개의 인자를 받아서 n의 값을 1씩 감소하도록 하면서 재귀하다가 n == 0일 때 재귀 종료
위처럼 종료할 조건을 n으로 파악할 수 있었는데 n값의 의미가 완전히 달라지면서 헤맸다
function answer(a, d, n){
let index = -1;
//등차수열
let num;
for(let i = 1; ; i++){
num = a + d * (i-1);
if( num > n){
index = -1; // 안해도 결과값은 같은데 한 번 더 명시해주기
break;
}
if( num == n){
index = i;
break;
}
}
return index;
}
/* main code */
let input = [
// TC: 1
[1, 2, 7],
// TC: 2
[2, 3, 10],
// TC: 3
[3, 5, 23],
];
for (let i = 0; i < input.length; i++) {
console.log(`#${i + 1} ${answer(input[i][0], input[i][1], input[i][2])}`);
}
for문에서 코드실행 및 종료 조건을 평가하는 식을 비워놓고 작성한다
for( let i = 1; ; i++)
등차수열의 다음항 => num을 구하는 식을 작성
num과 n 사이의 관계를 평가하여 인덱스 저장, break
- num == n: 현재 인덱스 저장, break
- num > n : -1, break
- num < n (위의 조건에 모두 부합하지 않음) 다음 인덱스로 넘어가 다시 평가
마지막에 저장된 index 값을 반환 후 출력
function answer(a, d, n){
let index = -1;
if(( n - a) % d == 0){
index = (n-a) / d + 1;
} else {
index = -1;
}
return index;
}
/* main code */
let input = [
// TC: 1
[1, 2, 7],
// TC: 2
[2, 3, 10],
// TC: 3
[3, 5, 23],
];
for (let i = 0; i < input.length; i++) {
console.log(`#${i + 1} ${answer(input[i][0], input[i][1], input[i][2])}`);
}
n이 해당 초항과 공차로 만들어 질 수 있는가 :
n = a + d + d + ...
(n - a) 를 d로 나눴을 때 나머지가 0이면 가능
n의 값이 배열 선상에 있는 것처럼 생각:
n의 현재 인덱스는 d가 초항에 더해진 횟수와 같음
[ 1, 3, 5, 7] 7의 인덱스 3 == d는 3번 더해짐
(n - a) / d + 1