티스토리 뷰

알고리즘/코딩테스트 공부

4-1 자릿수의 합

YG - 96년생 , 강아지 있음, 개발자 희망 2021. 11. 28. 01:00

문제

N개의 자연수가 입력되면 각 자연수의 자릿수의 합을 구하고, 그 합이 최대인 자연수를 출력
하는 프로그램을 작성하세요. 자릿수의 합이 같은 경우 원래 숫자가 큰 숫자를 답으로 합니다.
만약 235 와 1234가 동시에 답이 될 수 있다면 1234를 답으로 출력해야 합니다.

풀이

function solution(n, arr) {
  let answer;
  let max = Number.MIN_SAFE_INTEGER;
  for (let x of arr) {
    let sum = 0;
    let tmp = x;
    while (tmp) {
      sum += tmp % 10;
      tmp = Math.floor(tmp / 10);
    }
    console.log(sum);
    if (max < sum) {
      max = sum;
      answer = x;
    } else if (max === sum) {
      if (answer < x) {
        answer = x;
      }
    }
  }
  return answer;
}

let arr = [128, 460, 131, 40, 731, 137, 1631];
console.log(solution(7, arr));

while 에서 처음에 x %10 으로 일의자리 수를 더해주고 tmp = tmp/10 으로 해서 각각의 자리수를 더해주어서 풀었습니다. 

다른 풀이

function solution(n, arr) {
  let answer;
  let max = Number.MIN_SAFE_INTEGER;
  let cnt = 0;
  let num = 0;
  for (let x of arr) {
    cnt = 0;
    x = x
      .toString()
      .split("")
      .map((item) => +item);
    console.log(x);
    cnt = x.reduce((a, b) => a + b);
    if (max < cnt) {
      max = cnt;
      num = +x.join("");
    } else if (max === cnt) {
      console.log(max, num);
      num < +x.join("") ? (num = +x.join("")) : null;
    }

    //console.log(cnt);
    answer = num;
  }
  return answer;
}

let arr = [128, 460, 131, 40, 731, 137, 1631];
console.log(solution(7, arr));

x를 split을  통해 배열로 만든 후 각 자리를 reduce 로 더해서 비교하였습니다.

'알고리즘 > 코딩테스트 공부' 카테고리의 다른 글

4-3 멘토링  (0) 2021.11.28
4-2 뒤집은 소수  (0) 2021.11.28
3-5 문자열 압축  (0) 2021.11.27
3-4 가장 짧은 문자거리  (0) 2021.11.27
3-3 숫자만 추출  (0) 2021.11.27
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함