Algorism

등차수열의 항 찾기

자라나라나무나무나 2022. 7. 18. 18:55
a : 초항
d : 인접한 차이
n : 찾는 항의 수
만약 항 번호가 없을 때에는 -1을 반환한다.
예시) f(1) = 1, f(2) = 3, f(3) = 5, f(4) = 7

반복문 사용

function answer(a, d, n) {
  let index = -1;

  let acc;
  for(let i=1; ; i++) {
    acc = a + d * ( i - 1 );
    
    if(acc > n){
      index = -1;
      break;
    }
    if(acc == n) {
      index = i;
      break;
    }

    // console.log(acc);
  }

  return index;
}

let input = [

  [1, 2, 7],

  [2, 3, 10],

  [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])}`);
}

if문 사용

function answer(a, d, n) {
  let index = -1;

  if ((n - a) % d == 0) {
    index = (n - a) / d + 1;
  } else index = -1;

  return index;
}

let input = [

  [1, 2, 7],

  [2, 3, 10],

  [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])}`);
}

  if ((n - a) % d == 0) {

역으로 n - a(초항) 값을 하게되면 일정한 값의 등차값이 나오게 된다.

예시 ) 1, 3, 5, 7

7  - 1 => 6 % 2 == 0 등차수열에 속한다.

 

    index = (n - a) / d + 1

d + 1 인 이유는 초항의 값이 1이기 때문이다.

d로 나누게 되면 n의 값을 구할 수 있다.