lostSheep.js (7kyu 73)

Codewars 알고리즘 풀이


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