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

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

#나의 풀이

function answer(a, b, c) {
	let number = 0;
  
	// sort
	num = [a, b, c];
	num.sort((x, y) => x - y); // 오름차순
  
	number = (b-a > c-b) ? a + (b-a)/2 : b + (c-b)/2;

	return number;
  }                                         

  /* main code */
  let input = [
	// TC: 1
	[1, 7, 10],
  
	// TC: 2
	[3, 8, 18],
  
	// TC: 3
	[2, 5, 11],
  ];
  
  for (let i = 0; i < input.length; i++) {
	console.log(`#${i + 1} ${answer(input[i][0], input[i][1], input[i][2])}`);
  }
  • 주어진 배열이 짧고 배열의 간격이 일정하다는 점 덕분에 간단하게 짤 수 있다.
  • 잃어버린 카드의 위치는 두가지 : a다음, b다음
  • a다음인 경우의 조건: b - a > c - b
  • b다음인 경우의 조건: b - a < c - b
  • 빈 부분에서 공차가 더해진 횟수는 2번,
    a 다음인 경우 : a + 빈간격의 값 / 2
    b 다음인 경우 : b + 빈간격의 값 / 2

#기본 풀이

(강사님이 푸신방법)

function answer(a, b, c) {
	let number = 0;
  
	// sort
	num = [a, b, c];
	num.sort((x, y) => x - y); // 오름차순
  
	//공차값
	let d = 0;

	for( let i = 1; i < num.length; i++){
		d += num[i] - num[i-1];
	}

	d /= num.length;

	// 인덱스값
	let location = num[2] - num[1] > num[1] - num[0] ? 2 : 1;

	number = num[0] + d * location;

	return number;
  }                                                 

  /* main code */
  let input = [
	// TC: 1
	[1, 7, 10],
  
	// TC: 2
	[3, 8, 18],
  
	// TC: 3
	[2, 5, 11],
  ];
  
  for (let i = 0; i < input.length; i++) {
	console.log(`#${i + 1} ${answer(input[i][0], input[i][1], input[i][2])}`);
  }
  • d(공차)값을 반복문으로 모두 더한뒤 배열의 길이로 나눠서 구함
    => 원래 공차가 더해진 횟수는 배열의 길이 - 1 혹은 마지막 인덱스 값과 같지만
    => 중간에 카드가 빠지면서 배열의 길이가 맞춰지고
    => 간격의 크기(공차의 총합)은 변함이 없음
    => num.length로 나누어 공차를 구함

  • 빠진 카드의 자리(인덱스)를 구하고 값을 도출하는 과정은 하드코딩으로 구함

num.sort((x,y) => x - y)을 이용해서 배열을 오름차순으로 정리하여 빠진 카드의 올바른 자리를 찾는다.

삼항연산자를 잘 쓰면 코드가 더 간결해진다.


비교

  • 나의 풀이는 간결해서 코드는 간단하게 짤 수 있지만 중간 과정이 많이 생략되어 한 눈에 파악하기 힘들다.

  • 나의 풀이는 하드 코딩으로 현재 주어진 배열에서는 빠르게 작동하지만 배열이 늘어나면 오히려 오래 걸리고
    유지,보수 면에서 좋지 않다

  • 두번째 코드는 공차(d), 빠진 카드의 인덱스(location), 빠진 카드의 값(number)를 잘 구분해서 답이 구해지는 과정을 한 번에 파악할 수 있다.

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

0개의 댓글