초보 개발자의 일기
자릿수의 합 본문
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