인프런 커뮤니티 질문&답변

00님의 프로필 이미지
00

작성한 질문수

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

1. 자리수의 합

질문

작성

·

200

0

제가 영상 보기 전 혼자 풀어보았는데

function solution(n, arr) {
  let answer = 0,
    max_sum = 0;
  for (let x of arr) {
    let sum = 0,
      temp = x;
    while (temp) {
      sum += temp % 10;
      temp = Math.floor(temp / 10);
    }

    if (max_sum < sum || (max_sum === sum && answer < x)) {
      answer = x;
      max_sum = sum;
    }
  }
  return answer;
}

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

저는 if 문을 (max_sum < sum || (max_sum === sum && answer < x)) 이렇게 하나로 묶어서 썼는데 괜찮을까요 ?

 

그리고 선생님께서 max를 초기화할때 Number.MIN_SAFE_INTEGER 로 하셨는데 어차피 각자리수의 합이 0보다는 클것이라는 생각이 들어서 저의 경우엔 0으로 초기화 했는데 괜찮을까요?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.
User00님, 자바스크립트 코드에 관한 질문을 주셔서 감사합니다.

if 조건을 하나로 묶어서 사용하는 부분은 코드를 간결하게 하며 로직을 정확히 표현한다면 전혀 문제가 없습니다. User00님이 작성하신 if 조건문은 각 자리수의 합(sum)이 큰 숫자를 찾되, 같을 경우 원래 숫자(x)가 더 큰 것을 찾는 로직으로 보입니다. 이는 매우 효과적인 방법이므로 괜찮습니다.

max_sum을 0으로 초기화하는 부분 또한 가능합니다. 문제에서 주어진 arr의 모든 요소가 양의 정수라면 각 자리수의 합이 언제나 0보다 클 것이기 때문에, Number.MIN_SAFE_INTEGER보다 0으로 초기화하는 것이 더 직관적이고 적절할 수 있습니다. 단, 반드시 모든 입력 값이 양수라는 보장이 있을 때만 이 방식을 추천합니다.

따라서 User00님의 접근 방식은 특정 상황에서 더 나은 선택일 수 있으며 올바른 접근입니다.

00님의 프로필 이미지
00

작성한 질문수

질문하기