각 자연수의 자릿수의 합을 구하고, 그 합이 최대인 자연수를 출력
자릿수의 합이 같은 경우 원래 숫자가 큰 숫자가 답
나의 풀이
function solution(n, arr) {
let answer = Number.MIN_SAFE_INTEGER;
let sum;
let numSumMax = Number.MIN_SAFE_INTEGER;
for (let x of arr) {
// 각 자릿수 합 구하기
sum = x
.toString()
.split("")
.reduce((a, b) => a + Number(b), 0);
// 각 자릿수 합 구한게 최대합과 같고, 현재 숫자가 정답으로 친 숫자보다 크면 현재 숫자를 답으로
if (sum === numSumMax && x > answer) {
answer = x;
} else if (sum > numSumMax) { // 각 자릿수 합이 최대합보다 크면
numSumMax = sum;
answer = x;
}
}
return answer;
}
let arr = [128, 460, 603, 40, 521, 137, 123];
console.log(solution(7, arr));
원래는 각자리 숫자 합을 reduce라는걸 잊었어서 for문으로 돌았다.
다 풀고 강사님 코드를 참고하면서 기억이 났다.
계속 잊어버려서 이러한 메서드들은 따로 정리할 필요성을 느꼈다...
강사 풀이
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));
강사님은 각자리수 합을 따로 문자열로 변형해서 풀 필요 없이 5~8번째 줄과같이 while문을 통해 구하셨다.
10으로 나누면서 각 자릿수를 구하고, 다 나누면 나머지값이 0이므로 반복문을 빠져나가게 되는걸 이용하셨다.
'코딩테스트 문제풀이 > inflearn' 카테고리의 다른 글
[인프런] Node.js / 섹션4 - 완전탐색(브루트포스) / 3. 멘토링 (0) | 2023.01.24 |
---|---|
[인프런] Node.js / 섹션4 - 완전탐색(브루트포스) / 2. 뒤집은 소수 (0) | 2023.01.19 |
[인프런] Node.js / 섹션3 - 문자열 탐색 / 5. 문자열 압축 (0) | 2023.01.16 |
[인프런] Node.js / 섹션3 - 문자열 탐색 / 4. 가장 짧은 문자거리 (0) | 2023.01.14 |
[인프런] Node.js / 섹션3 - 문자열 탐색 / 3. 숫자만 추출 (0) | 2023.01.14 |