Problem
- Every week (Friday and Saturday night), the farmer and his son count amount of sheep returned to the yard of their farm.
- 매주 금요일과 토요일 밤에, 농부와 그의 아들은 농장에 있는 양의 수를 세어 반환한다.
- You will be given two arrays representing number of sheep as they were returning to the yard during the evening.
- 농장으로 돌아온 양의 수를 나타내는 두 개의 배열이 주어진다.
- Farmer and his son know the total amount of their sheep, you will be given this number as third parameter.
- 양의 전체 마릿수가 세 번째 매개변수로 주어진다.
- Your goal is to calculate the amount of sheep lost (not returned) to the farm after Saturday night counting.
- 토요일 밤 이후 농장으로 돌아오지 않은 양의 수를 반환한다.
Solution 01
function lostSheep(fri, sat, total) {
let countFri = 0;
let countSat = 0;
for (let i = 0; i < fri.length; i++) {
countFri += fri[i];
}
for (let j = 0; j < sat.length; j++) {
countSat += sat[j];
}
return total - countFri - countSat;
}
lostSheep([], [], 10); // 10
lostSheep([2, 2], [2, 2], 10); // 2
lostSheep([4, 5], [3, 2], 10); // 6
Solution 02
function lostSheep(fri, sat, total) {
let sum = 0;
for (let i in fri) {
sum += fri[i];
}
for (let i in sat) {
sum += sat[i];
}
return total - sum;
}
lostSheep([], [], 10); // 10
lostSheep([2, 2], [2, 2], 10); // 2
lostSheep([4, 5], [3, 2], 10); // 6
Solution 03
function lostSheep(fri, sat, total) {
let countFri = fri.length ? fri.reduce((sum, i) => sum + i) : 0;
let countSat = sat.length ? sat.reduce((sum, i) => sum + i) : 0;
return total - countFri - countSat;
}
lostSheep([], [], 10); // 10
lostSheep([2, 2], [2, 2], 10); // 2
lostSheep([4, 5], [3, 2], 10); // 6
reduce()
: 배열을 하나의 값으로 줄이고, 그 값을 반환한다.
Solution 04
function lostSheep(fri, sat, total) {
return fri.concat(sat).reduce((sum, i) => sum - i, total);
}
lostSheep([], [], 10); // 10
lostSheep([2, 2], [2, 2], 10); // 2
lostSheep([4, 5], [3, 2], 10); // 6
concat()
: 두 개 이상의 배열을 결합하고, 새 배열을 반환한다.
Solution 05
function lostSheep(fri, sat, total) {
return [...fri, ...sat].reduce((sum, i) => sum - i, total);
}
lostSheep([], [], 10); // 10
lostSheep([2, 2], [2, 2], 10); // 2
lostSheep([4, 5], [3, 2], 10); // 6