-
[04.완전탐색] 자리수의 합알고리즘 2022. 4. 3. 22:00
문제
N개의 자연수가 입력되면 각 자연수의 자릿수의 합을 구하고, 그 합이 최대인 자연수를 출력 하는 프로그램을 작성하세요. 자릿수의 합이 같은 경우 원래 숫자가 큰 숫자를 답으로 합니다. 만약 235 와 1234가 동시에 답이 될 수 있다면 1234를 답으로 출력해야 합니다.
▣ 입력설명
첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다. 각 자연수의 크기는 10,000,000를 넘지 않는다.▣ 출력설명
자릿수의 합이 최대인 자연수를 출력한다.▣ 입력예제 1
7
128 460 603 40 521 137 123▣ 출력예제 1 137
결과
O
내가 푼 방식
const solution = (array) => { let max = 0; let maxIdx = 0; for(let i = 0; i < array.length; i++) { let str = array[i].toString(); let sum = 0; for(let key of str) { sum = sum + Number(key); } if(sum > max) { max = sum maxIdx = i; } if(sum === max) { maxIdx = (array[maxIdx] > array[i]) ? maxIdx : i } } return array[maxIdx] }
접근과정
- 매개 변수로 받는 배열을 탐색하기 위한 1차 반복문 그리고 해당 인덱스의 값의 각 자리수의 총합을 구하기 위한 2차 반복문을 돌려야 한다.
- max값을 위한 변수를 설정하고 각 자리수의 총합이 같을 때 그 두 수의 원래 값의 비교를 위한 해당 인덱스를 넣는 maxIdx도 변수로 설정한다.
- 1차 반복문을 돌리고 그 안에 반복문으로 각 자리수의 총합을 sum을 구하고 sum이 max보다 클 때 max에 sum을 할당한다.
- sum과 max가 같을 때 해당 두 수의 원래 값을 비교하기 위해 array[maxIdx]의 값과 array[i]값을 비교하여 더 큰 값을 maxIdx에 할당한다.
- return할 값은 제일 큰수의 원래 값이므로 array[maxIdx]를 리턴한다.
모범답안
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; }
리뷰
'알고리즘' 카테고리의 다른 글
[04.완전탐색] k번째 큰 수 (0) 2022.04.17 [04.완전탐색] 멘토링 (0) 2022.04.10 [04.완전탐색] 뒤집은 소수 (0) 2022.04.03 [03.문자열탐색] 문자열 압축 (0) 2022.04.03 [03.문자열탐색] 가장 짧은 문자거리 (0) 2022.03.27