초보 개발자의 일기

자릿수의 합 본문

코딩테스트/JS 알고리즘 문제(JS)

자릿수의 합

판다꼬마 2023. 1. 6. 15:56
728x90

문제

 

 

입력

  • 첫 줄에 자연수의 개수 N이 주어지고, 그다음 줄에 N개의 자연수가 주어진다.
  • 각 자연수의 크기는 10,000,000를 넘지 않는다.

 

출력

자릿수의 합이 최대인 자연수를 출력한다.

 

입력 예시

7
128, 460, 603, 40, 521, 137, 123

출력 예시

137

풀이 방법

각 배열에 있는 값을 toString.split("")을 이용하여 각각의 배열로 쪼개어

이중 for문을 돌려서 sum에 숫자를 저장 후 max와 sum을 Math.max로 비교 후 asnwer에 저장하였다.

if(sum>max){
    answer=eachNum;
}
else if(sum===max){
    if(eachNum>answer){
        answer=eachNum
    }
}
 그 후 이 코드를 통해 자리수의 합이 같은 숫자끼리는 조건문을 통해 값 비교 후 숫자가 더 큰 값을 선택하였다.

 

내 코드

<html>
<head>
    <meta charset="UTF-8">
    <title>출력결과</title>
</head>
<body>
<script>
    const sol=(n,s) =>{
        let max=0;
        let sum=0;
        let eachNum=0;
        let answer=0;
        let eachNum2=0;

        for(let i=0; i<n; i++){
            eachNum=s[i]
            eachNum2=eachNum.toString().split("")
            for(let j=0; j<eachNum2.length; j++){
                sum+=Number(eachNum2[j])
            }
            max=Math.max(max,sum)
            if(sum>max){
                answer=eachNum;
            }
            else if(sum===max){
                if(eachNum>answer){
                    answer=eachNum
                }
            }
            sum=0;
        }

        return answer;
    }

    let arr=[128, 460, 603, 40, 521, 137, 123];
    console.log(sol(7, arr));
</script>
</body>
</html>

Solution

방법 1
<html>
<head>
    <meta charset="UTF-8">
    <title>출력결과</title>
</head>
<body>
<script>
    function solution(n, arr){
        let answer, max=Number.MIN_SAFE_INTEGER;
        for(let x of arr){
            let sum=0, tmp=x;
            while(tmp){
                sum+=(tmp%10);
                tmp=Math.floor(tmp/10);
            }
            if(sum>max){
                max=sum;
                answer=x;
            }
            else if(sum===max){
                if(x>answer) answer=x;
            }
        }
        return answer;
    }

    let arr=[128, 460, 603, 40, 521, 137, 123];
    console.log(solution(7, arr));
</script>
</body>
</html>


방법 2

<html>
<head>
    <meta charset="UTF-8">
    <title>출력결과</title>
</head>
<body>
<script>
    function solution(n, arr){
        let answer, max=Number.MIN_SAFE_INTEGER;
        for(let x of arr){
            let sum=x.toString().split('').reduce((a, b)=>a+Number(b), 0);
            if(sum>max){
                max=sum;
                answer=x;
            }
            else if(sum===max){
                if(x>answer) answer=x;
            }
        }
        return answer;
    }

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

느낀점

내 풀이보단 솔루션의 풀이 시간복잡도면에서 더 좋은 코드이다.

솔루션코드도 보고 다시 한번 풀어봐야겠다.

728x90

'코딩테스트 > JS 알고리즘 문제(JS)' 카테고리의 다른 글

멘토링  (0) 2023.01.08
뒤집은 소수  (1) 2023.01.07
숫자만 추출  (0) 2023.01.02
가위바위보  (1) 2022.09.30
보이는 학생  (1) 2022.08.22