판다꼬마 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