ν‹°μŠ€ν† λ¦¬ λ·°

문제

N개의 μžμ—°μˆ˜κ°€ μž…λ ₯되면 각 μžμ—°μˆ˜μ˜ 자릿수의 합을 κ΅¬ν•˜κ³ , κ·Έ 합이 μ΅œλŒ€μΈ μžμ—°μˆ˜λ₯Ό 좜λ ₯ν•˜κ³ μž ν•œλ‹€.자릿수의 합이 같은 경우 μ›λž˜ μˆ«μžκ°€ 큰 숫자λ₯Ό λ‹΅μœΌλ‘œ ν•œλ‹€. λ§Œμ•½ 235와 1234κ°€ λ™μ‹œμ— 닡이 될 수 μžˆλ‹€λ©΄ 1234λ₯Ό λ‹΅μœΌλ‘œ 좜λ ₯ν•΄μ•Ό ν•œλ‹€.(각 μžμ—°μˆ˜μ˜ ν¬κΈ°λŠ” 10,000,000λ₯Ό λ„˜μ§€ μ•ŠλŠ”λ‹€.)

 

λ¬Έμ œν’€μ΄

각 자릿수의 합을 κ΅¬ν•˜κΈ° μœ„ν•΄μ„œλŠ” μš°μ„  각 μžλ¦Ώμˆ˜λ“€μ„ μžμ—°μˆ˜ λ‚΄μ—μ„œ μΆ”μΆœν•΄μ•Ό ν•œλ‹€. 

 

λ³Έ λ¬Έμ œμ—μ„œ 각 μžμ—°μˆ˜ μžλ¦Ώμˆ˜μ€ 2-3자리이기 λ•Œλ¬Έμ— 자릿수λ₯Ό νŠΉμ • μ§“μ–΄ κ΅¬ν•˜κΈ°μ—λŠ” ν•œκ³„κ°€ μžˆλ‹€. 

 

예λ₯Ό λ“€μ–΄ 각 μžμ—°μˆ˜μ˜ 크기가 10,000,000λ₯Ό λ„˜μ§€ μ•ŠλŠ”λ‹€λŠ” 쑰건 상, λ°˜λ³΅λ¬Έμ„ 톡해 8의 μžλ¦¬μ—μ„œ λΆ€ν„° 순차적으둜 ꡬ할 μˆ˜λ„ μžˆλ‹€.

ν•˜μ§€λ§Œ  123κ³Ό 같이 3자리 μžμ—°μˆ˜μ™€ 같은 κ²½μš°λŠ” 4의 μžλ¦¬κΉŒμ§€ λ‚˜μ˜€λŠ” λͺ«, μžλ¦Ώμˆ˜λŠ” 0이기 λ•Œλ¬Έμ— μ΅œμ’… 합산에 λΆˆν•„μš”ν•˜κΈ° λ•Œλ¬Έμ— μžμ—°μˆ˜μ˜ 자릿수 λ²”μœ„λ₯Ό νŠΉμ • μ§“κ³  μ•žμ—μ„œλΆ€ν„°  μžλ¦Ώμˆ˜λ“€μ„ κ΅¬ν•˜λŠ” 것은 λ‹€μ†Œ λΉ„νš¨μœ¨μ μ΄λ‹€. 

 

이λ₯Ό λŒ€μ‹ μ— ν•΄λ‹Ή 값을 10으둜 λ‚˜λˆˆ λ‚˜λ¨Έμ§€ 값을 톡해  더 이상 λ‚˜λˆ„μ–΄μ§ˆ 값이 μ—†μ–΄μ§ˆ λ•ŒκΉŒμ§€(λͺ«μ΄ 0이 λ λ•Œ κΉŒμ§€) 일의 μžλ¦¬μ—μ„œλΆ€ν„° 순차적으둜 ꡬ할 수 μžˆλ‹€.μ΄λ•Œ λ‹€μŒ 자릿수λ₯Ό μΆ”μΆœν•˜κΈ° μœ„ν•΄μ„œλŠ” μ›λž˜μ˜ μžμ—°μˆ˜κ°€ μ•„λ‹Œ 이전에 10으둜 λ‚˜λˆˆ λͺ«μ„ κ°€μ§€κ³  연산을 ν•΄μ•Ό ν•œλ‹€.  이λ₯Ό μœ„ν•΄ 반볡될 λ•Œλ§ˆλ‹€  j의 값을 본래 κ°’μ—μ„œ 10으둜 λ‚˜λˆˆ κ°’μœΌλ‘œ μ΄ˆκΈ°ν™” ν•΄μ€€λ‹€. 

 

자릿수의 합이 같은 경우λ₯Ό μœ„ν•΄μ„œλŠ” 사전에 μ •λ‹΅ λ³€μˆ˜μ— ν• λ‹Ήν•œ μžμ—°μˆ˜ κ°’κ³Ό ν˜„μž¬ μ‘°νšŒν•˜κ³  μžˆλŠ” 인덱슀의 μžμ—°μˆ˜ 값을 비ꡐ μ—°μ‚°ν•˜μ—¬,  κ·Έ 값이 더 큰 μžμ—°μˆ˜λ₯Ό μ •λ‹΅ λ³€μˆ˜μ— ν• λ‹Ήν•΄ μ€€λ‹€.

 

μ½”λ“œ

function solution(...arr) {
  let answer;
  let max = Number.MIN_SAFE_INTEGER;

  for (let i = 0; i < arr.length; i++) {
    let sum = 0;
    for (let j = arr[i]; j > 0; j = j / 10) {
      sum += Math.floor(j % 10);
    }
    if(max < sum) {
      answer = arr[i];
      max = sum;
    } 
    if(max === sum) {
      if(answer < arr[i]) {
        answer = arr[i]
      }
    }
  }

  return answer;
}

console.log(solution(128, 460, 603, 40, 521, 137, 123));

 

λ¬Έμ œν’€μ΄2

forλ¬Έμ΄λ‚˜ whileλ¬Έκ³Ό 같이 쀑첩 λ°˜λ³΅λ¬Έμ„  μ‚¬μš©ν•˜μ§€ μ•Šλ”λΌλ„ Array.reduce() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 각 μžλ¦Ώκ°’μ˜ 쀑첩 된 ν•©μ‚° 값을 ꡬ할 수 μžˆλ‹€.(μ΄λ•Œ reduceλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν•΄λ‹Ή 배열이 각 자릿수 λ³„λ‘œ 이루어진 λ°°μ—΄λ‘œ  κ΅¬μ„±λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€)

 

μ½”λ“œ

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));

 

λŒ“κΈ€
곡지사항
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€
Total
Today
Yesterday
링크
TAG
more
Β«   2026/02   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
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
κΈ€ 보관함