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])}`);
}
(강사님이 푸신방법)
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)를 잘 구분해서 답이 구해지는 과정을 한 번에 파악할 수 있다.