article thumbnail image
Published 2022. 6. 11. 00:46
자릿수의 합
N개의 자연수가 입력되면 각 자연수의 자릿수의 합을 구하고, 그 합이 최대인 자연수를 출력
하는 프로그램을 작성하세요. 자릿수의 합이 같은 경우 원래 숫자가 큰 숫자를 답으로 합니다.
만약 235 와 1234가 동시에 답이 될 수 있다면 1234를 답으로 출력해야 합니다.
▣ 입력설명
첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다.
각 자연수의 크기는 10,000,000를 넘지 않는다.
▣ 출력설명
자릿수의 합이 최대인 자연수를 출력한다.
▣ 입력예제 1
7
128 460 603 40 521 137 123
▣ 출력예제 1
137

11 10 9 4 8 11 6

문제를 이해해보자.
 
4개의 자연수가 입력된다고 했을 때,
123 231 111 122 이러한 숫자가 입력되고 
그안에서 자릿수의 합이 가장 큰 값을 출력하는 것이다.
합한 값은 6 6 3 5 가 출력되는데 만약에 자릿수의 합이 같을 경우엔,
원래 숫자가 더 큰 숫자로 출력되게 만드는 것이다.
 

📌작성코드

<html>

<head>
  <meta charset="UTF-8">
  <title>출력결과</title>
</head>

<body>
  <script>
    function solution(n, arr) {
      let answer;
      let max = 0;
      let sum;
      for (let i = 0; i < arr.length; i++) {
        sum = arr[i].toString().split('').reduce((a, b) =>
          a + Number(b), 0 //reduce는 초기값을 정해줘야한다.
        ) //a는 누적되는값 b는 배열의 현재(지금은 string이라 number로 바꿔야함)
        if (max < sum) { // 누적되는 값을 비교
          max = sum // 새로 합한 값이 더 크면 max 값을 교체
          answer = arr[i] // answer에 합한 값이 큰 index를 저장
        } else if (max === sum) { // 합한 값이 서로 같은 index가 있다면?
          if (answer < arr[i]) {  // 어떤 인덱스가 더 큰지 비교
            answer = arr[i] // 더 큰 index 값을 answer에 저장
          }
        }
      }
      return answer;
    }
    let arr = [128, 460, 603, 40, 521, 137, 123];
    console.log(solution(7, arr));
  </script>
</body>

</html>

우선 합의 최대값을 저장할 max변수를 만들고 합을 넣을 sum변수도 만든다.

 

for문을 사용하여 arr인덱스를 (즉 128, 460이렇게 들어오는 숫자들)

스트링으로 만들고(숫자라서 스트링으로 만들어줘야한다.), split로 숫자를 쪼갠다음,

reduce로 값을 더해서 누적으로 시켜준다.

(reduce를 사용하지않으면 더한 값이 누적이 안된다!)

reduce()에 콜백함수를 넣고 a는 누적되는 값 + b는 배열의 현재 위치를 넣어준다.

조건문으로 max(초기설정0)보다 sum(합한값)이 더 크면 

max에 합한 값을 넣어주고, 

answer에 합한 값이 큰 index를 저장시킨다.

(합한 결과가 들어가는게 아니고, 128 이런식으로 index가 들어가야해서

answer = arr[i]를 넣어준다.)

 

문제를 보면 만약에 합한 값이 서로 같으면 더 큰 자연수를 반환하라고 했기때문에

else if 에 조건을 넣고, answer(지금까지 더한 결과값) 보다 arr[i]가 더 크면 

더 큰 값을 answer 에 저장시킨다.

(answer가 128이고 arr[i]가 137이면 둘의 합은 같으니 원래 숫자를 비교한다!)

'알고리즘' 카테고리의 다른 글

[알고리즘 문제] 4-3번  (1) 2022.06.13
[알고리즘 문제] 4-2번  (0) 2022.06.13
[알고리즘 문제] 3-5번  (0) 2022.06.10
[알고리즘 문제] 3-4번  (0) 2022.06.10
[알고리즘 문제] 3-3번  (0) 2022.06.10
복사했습니다!