rowWeights.js (7kyu 77)

Codewars 알고리즘 풀이


Problem

  • Several people are standing in a row divided into two teams.
    • 몇 사람이 두 팀으로 나누어 서 있다.
  • The first person goes into team 1, the second goes into team 2, the third goes into team 1, and so on.
    • 첫 번째 사람은 팀 1에 들어가고, 두 번째 사람은 팀 2에 들어가고, 세 번째 사람은 팀 1에 들어가는 식으로 진행된다.
  • Given an array of positive integers, return a new array of two integers, where the first one is the total weight of team 1, and the second one is the total weight of team 2.
    • 새로운 두 정수의 배열을 반환한다.
    • 첫 번째 정수는 팀 1의 총 가중치이고, 두 번째 정수는 팀 2의 총 가중치이다.


Solution 01

function rowWeights(arr) {
  let t1 = 0;
  let t2 = 0;
  
  for (let i = 0; i < arr.length; i++) {
    if (i % 2 === 0) {
      t1 += arr[i];
    } else {
      t2 += arr[i];
    }
  }
  return [t1, t2];
}

rowWeights([1, 2, 3, 4]);  // [4, 6]
rowWeights([5, 6, 3, 2]);  // [8, 8]


Solution 02

function rowWeights(arr) {
  let result = [0, 0];
  
  for (let i = 0; i < arr.length; i++) {
    i % 2 === 0 ? result[0] += arr[i] : result[1] += arr[i];
  }
  return result;
}

rowWeights([1, 2, 3, 4]);  // [4, 6]
rowWeights([5, 6, 3, 2]);  // [8, 8]


Solution 03

function rowWeights(arr) {
  let t1 = arr.filter((i, index) => index % 2 === 0).reduce((result, i) => result + i, 0);
  let t2 = arr.filter((i, index) => index % 2 !== 0).reduce((result, i) => result + i, 0);
  
  return [t1, t2];
}

rowWeights([1, 2, 3, 4]);  // [4, 6]
rowWeights([5, 6, 3, 2]);  // [8, 8]

filter(): 테스트를 통과한 배열의 각 값을 모아, 새 배열로 반환한다.

reduce(): 배열을 하나의 값으로 줄이고, 그 값을 반환한다.


Solution 04

function rowWeights(arr) {
  return arr.reduce((result, i, index) => (result[index % 2] += i, result), [0, 0]);
}

rowWeights([1, 2, 3, 4]);  // [4, 6]
rowWeights([5, 6, 3, 2]);  // [8, 8]