자바스크립트 코딩테스트 연습 5일차

Y·2020년 8월 2일
0

문제


내풀이


function sumDigPow(a, b) {
  const answer = [];
  for(let i=a;i<=b;i++){
    const numList = [];
    const checkNum = String(i).split('')
    for(let k=0;k<checkNum.length;k++){
      numList.push(Math.pow(parseInt(checkNum[k]),k+1))
    };
    const property = numList.reduce((a,b)=>a+b);
    if(property === i){
      answer.push(i)
    }
  }
  return answer
}

a부터 b까지 1씩 더해가면서 모든 경우를 탐색한다. 숫자를 받아 각자리수대로 쪼개서 계산한다.

추천 풀이


function sumDigPow(a, b) {
  var ans = [];
  while(a <= b){
    if(a.toString().split('').reduce((x,y,i)=>x + +y ** (i + 1),0) == a)
      ans.push(a);
    a++;
  }
  return ans;
}

공부


reduce문에 3번째, 4번째 인자로 인덱스와 배열을 받을 수 있다는 걸 까먹고 있었다.. reduce 는 기본적으로는 accumulatorcurrentValue 를 인자로 받는다. 추가적으로는 currentValueindex, 함수를 호출한 array 자체를 인자로 받을 수 있다.

profile
연세대학교 산업공학과 웹개발 JavaScript

0개의 댓글