Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 빅오
- 정렬
- 알고리즘
- 투포인터
- 해쉬
- NextAuth
- 슬라이딩윈도우
- styled-components
- TypeScript
- 라이프사이클
- 큐
- 블로그만들기
- textarea autosize
- isNaN
- cookie
- js알고리즘
- react
- nextjs
- JavaScript
- 버블정렬
- never타입
- react-query
- 스택
- tailwindcss
- 그리디
- nestjs
- Algorithm
- next.js
- typscript
- aws lightsail
Archives
- Today
- Total
far
[JS 알고리즘] 자릿수의 합 본문
자릿수의 합
N개의 자연수가 입력되면 각 자연수의 자릿수의 합을 구하고, 그 합이 최대인 자연수를 출력하는 프로그램을 작성하세요. 자릿수의 합이 같은 경우 원래 숫자가 큰 숫자를 답으로 합니다. 만약 235 와 1234가 동시에 답이 될 수 있다면 1234를 답으로 출력해야 합니다.
입력설명
첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다.
각 자연수의 크기는 10,000,000를 넘지 않는다.
출력설명
자릿수의 합이 최대인 자연수를 출력한다.
입력예제
128 460 603 40 521 137 123
출력예제
137
// 나의 풀이
function solution(n, arr){
let answer = 0;
let prev = 0;
let num = 0;
for (let i of arr) {
let str = i.toString()
for (let j = 0; str.length > j; j++) {
prev += parseInt(str[j])
}
if (prev >= num) {
num = prev
answer = i
} else if (prev === num && i > answer) {
answer = i
}
prev = 0
}
return answer;
}
let arr=[128, 460, 603, 40, 521, 137, 123];
console.log(solution(7, arr));
for...of문 이후 i를 문자열로 변환해서 다시 반복문을 돌리고 숫자 변환 후 계산하는 방식으로 풀었다.
// 강의의 풀이 1
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); // 10으로 나눠서 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));
수학적인 계산으로 푸는 방법을 사용했다. tmp%10을 사용하면 일의 자리 숫자만 남게 되고 Math.floor(tmp/10)을 사용하면 십의자리 이상인 숫자만 남게 되기 때문에 쉽게 합을 구할 수 있다.
// 강의의 풀이 2
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));
문자열 변환 이후 split으로 잘라서 reduce로 합계를 구하는 방법이다. 풀이를 보니까 이게 가장 많이 사용하는 공식이 아닐까 싶다.
Number를 current값 넣는 부분에다 적용 시키면 number타입으로 변환이 가능한 것 같다.
'알고리즘 > 알고리즘 베이스' 카테고리의 다른 글
[JS 알고리즘] 멘토링 (완전탐색) (0) | 2023.03.26 |
---|---|
[JS 알고리즘] 뒤집은 소수 (0) | 2023.03.26 |
[JS 알고리즘] 문자열 압축 (0) | 2023.03.25 |
[JS 알고리즘] 가장 짧은 문자거리 (0) | 2023.03.25 |
[JS 알고리즘] 숫자만 추출 (0) | 2023.03.25 |
Comments