けたの和


N個のビット数を入力すると、自然数ごとのビット数の和を求め、プログラム出力最大の自然数を作成することができます.数字の和が同じなら、元の数字の大きい数字を答えにします.235と1234が同時に答えになる場合は、1234を答えとして出力する.

入力例


[128, 460, 603, 40, 521, 137, 123]

出力例


137

各位置の和をエクスポートして問題を解決する方法。


次の方法は数学を利用して問題を解くことです.直感的ですが、関数からこのように値を導出する解法は滑らかではないと思います.
function solution(arr) {
  let answer, max=Number.MIN_SAFE_INTEGER;//max는 가장 작은 숫자로 초기화
  arr.forEach(item => {
    let sum = 0;
    let temp = item;
    while(temp) {
      sum+=(temp % 10); // 나머지를 sum에 합치기 
      temp=Math.floor(temp/10); // 나머지의 몫 구하기
    }
    if (sum > max) {
      max=sum;
      answer=item;
    }
    else if (sum === max) {
      if (item > answer) {
        answer = item;
      }
    }
  });
  return answer;
};

const arr = [128, 460, 603, 40, 521, 137, 123];

console.log(solution(arr));

組み込み関数を使用して配列内の要素と


配列された各要素をspilt()メソッドに変換し、計算機関数を用いて和を求める.ただしこのときtoString()では2次元配列の内部値は文字列であるため,和を求めるためには数字に変換しなければならない.
次の値と最大値を比較し、配列内の他の数値をフィルタする論理を記述しますが、この値とは数値です.
function solution(arr) {
  let answer, max=Number.MIN_SAFE_INTEGER;//max는 가장 작은 숫자로 초기화
  arr.forEach(item => {
    let sum = item.toString().split('').reduce((a, b) => a+Number(b), 0); // reduce로 요소를 sum으로 바꿔주기, 반드시 기억해두자. string 타입은 그대로 옆으로 붙는다. 
    if (sum > max) {
      max=sum;
      answer=item;
    }
    else if (sum === max) {
      if (item > answer) {
        answer = item;
      }
    }
  });
  return answer;
};

const arr = [128, 460, 603, 40, 521, 137, 123];

console.log(solution(arr));