🗃️javascript/코테 프레임 문제

4-1 자릿수의 합(x) [for문의 안쓰기 위해 발버둥 치는 중]

하얀성 2024. 4. 17. 10:13

https://elecch.tistory.com/426

 

4-1 자리수의 합[브루트포스] ,reduce 0 : 타입 초기화

브루트포스(Brute Force)는 문제를 해결하는 방식 중 하나로, 모든 가능한 경우의 수를 일일이 확인하는 방법을 의미합니다. let sum = [...String(arr[i])].reduce((a,c) => a + Number(c),0); 이것부터 뜯어보자. redu

elecch.tistory.com

sort로 내가 애먹은 조건을 처음부터 고치고 시작한 과거의 나.(너무 잦은 for문의 남발과 복잡한 코드사용이 좀 아쉽긴 하지만 그래도 고작 30분만에 풀어냈다. 그래도 헛수고는 아닌게 for문 사용의 지양화라는 목표가 있으니까)


<작성 코드> 

function solution(n, arr) {
  let biggest = 0;
  let answer = arr.map((x) => {
    if (biggest === 0) {
      biggest += x;
      return biggest;
    }
   
    const isCorrect =
      [...`${biggest}`].reduce((acc, sub) => {
        sub = sub * 1;
        return acc + sub;
      }, 0) <
      [...`${x}`].reduce((acc, sub) => {
        sub = sub * 1;
        return acc + sub;
      }, 0)
        ? true
        : false;
 
    if (isCorrect) {
      biggest = 0;
      biggest += x;
      console.log(biggest);
    }

    return biggest;
  });
  return answer;
}

let arr = [128, 460, 603, 40, 521, 137, 123];
console.log(solution(7, arr));

// let num = "";
// num += arr[0];
// let answer = [...num].reduce((acc, sub) => {
//   sub = sub * 1;
//   console.log(sub);
//   return acc + sub;
// }, 0);
// console.log(answer);

 

 


내 코드의 문제점:

1. {} + return은 은 서로 상쇄 되서 화살표 기호 바로 옆에 return문 없이 return 값을 적어주면되는 것을 적용x

2. (currentSum === biggestSum && x > biggest

윗 조건문. 만약에 같다면 더 합이 큰 값으로 바꿔줘야 하는데 이 조건없이  currentSum > biggestSum 라는 조건만 내가 코드로 구현하고자 함.

3. Number()라는 메소드를 까먹고 사용 못함.


 

<문제 답안>

function solution(n, arr) {
  biggest = arr[0];
  const sumLetter = (num) =>
    [...`${num}`].reduce((acc, sub) => acc + Number(sub), 0);

  arr.forEach((x) => {
    let biggestSum = sumLetter(biggest);
    let currentSum = sumLetter(x);

    if (currentSum > biggestSum || (currentSum === biggestSum && x > biggest)) {
      biggest = x;
    }
  });
  return biggest;
}

let arr = [128, 460, 603, 40, 521, 137, 123];
console.log(solution(7, arr));

노력은 가상하나... 체력도 후달림을 감지중임.