[기본 수학 이론] 점화식 - 등차수열 ✅ (문풀)

김수연·2022년 9월 12일
0
post-thumbnail

# 문제

[ 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값의 의미가 완전히 달라지면서 헤맸다

# 풀이 1

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 값을 반환 후 출력

# 풀이 2

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

profile
길을 찾고 싶은 코린이 of 코린이

0개의 댓글