자바스크립트 알고리즘 문제풀이 강의를 듣고 정리한 내용입니다.
📋 문제
N개의 자연수가 입력되면 각 자연수의 자릿수 합을 구하고 그 합이 최대인 자연수를 출력한다.
자릿수의 합이 같은 경우 기존 자연수가 큰 수가 답이 된다.
만약 236과 1235가 있다면 이 둘의 자릿수 합은 11로 동일하지만 1235가 더 큰 수 이므로 1235가 답이 된다.
👉 입력
N개의 자연수가 주어진다.
👈 출력
자릿수의 합이 최대인 자연수를 출력한다.
📝 풀이
function solution(arr) {
let answer = 0, max = Number.MIN_SAFE_INTEGER;
let temp;
for (const a of arr) {
temp = 0;
for (const s of String(a)) {
temp += Number(s);
}
if (temp >= max && answer < a) {
max = temp;
answer = a;
}
}
return answer;
}
let arr = [128, 460, 603, 40, 521, 137, 123, 236, 1235];
console.log(solution(arr));
주어진 배열 arr의 요소들을 순회하면서 요소들을 하나씩 쪼개고 그 수를 더해야 한다.
숫자를 그대로 10씩 나눠가면서 더할 수도 있겠지만 문자형으로 다루는 것이 더 편해서 각 요소를 순회할 때마다 해당 요소를 문자형으로 바꾼 뒤, 쪼개진 것들을 다시 숫자형으로 바꾸어 더해주었다.
그러니까 안쪽 for문에서는 128 -> '1', '2', '8' -> 1 + 2 + 8이라는 작업이 이루어지는 것이다.
이후 if문에서 현재 값이 이전 값 중 최댓값보다 크고 기존의 자연수가 저장해둔 값보다 크면 max를 현재 값으로, answer를 기존의 자연수로 바꾼다.
이러한 과정을 거치면 answer에는 자릿수의 합이 동일한 것 중 제일 값이 큰 자연수가 담기게 된다.
function solution(arr) {
let answer, max = Number.MIN_SAFE_INTEGER;
for (const a of arr) {
let sum = 0, temp = a;
while (temp) {
sum += temp % 10;
temp = Math.floor(temp / 10);
}
if (sum >= max) {
max = sum;
answer = answer > a ? answer : a;
}
}
return answer;
}
let arr = [128, 460, 603, 40, 521, 137, 123, 236, 1235];
console.log(solution(arr));
이 코드는 위와 동일하지만 기존 자연수를 문자형으로 바꾸지 않고 숫자로만 처리하는 방식이다.
function solution(arr) {
let answer, max = Number.MIN_SAFE_INTEGER;
for (const a of arr) {
let sum = a.toString().split('').map(Number).reduce((a, b) => a + b)
if (sum >= max) {
max = sum;
answer = answer > a ? answer : a;
}
}
return answer;
}
let arr = [128, 460, 603, 40, 521, 137, 123, 236, 1235];
console.log(solution(arr));
이 코드는 맨 위의 코드와 동일한 로직이지만 코드의 길이는 더 짧다.
arr의 각 요소를 문자형으로 바꾸어 값을 계산하는 것은 동일하다.
총합을 구하는 과정만 reduce()를 사용한 것이다.
다음부터는 누적값을 구할 때 reduce()를 한 번씩 떠올려보는 것도 좋을 것 같다.
'Algorithm > JavaScript' 카테고리의 다른 글
[완전탐색] 멘토링 (0) | 2021.12.13 |
---|---|
[완전탐색] 뒤집은 소수 (0) | 2021.12.13 |
[문자열탐색] 문자열 압축 (0) | 2021.12.10 |
[문자열탐색] 가장 짧은 문자거리 (0) | 2021.12.10 |
[문자열탐색] 숫자만 추출 (0) | 2021.12.10 |
댓글