λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Algorithm

[Algorithm] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ Lv.1 : ν•˜μƒ€λ“œ 수

by 코딩곡책 2022. 11. 16.
λ°˜μ‘ν˜•

ν•˜μƒ€λ“œ 수

μ–‘μ˜ μ •μˆ˜ xκ°€ ν•˜μƒ€λ“œ 수이렀면 x의 자릿수의 ν•©μœΌλ‘œ xκ°€ λ‚˜λˆ„μ–΄μ Έμ•Ό ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 18의 자릿수 합은 1+8=9이고, 18은 9둜 λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€λ―€λ‘œ 18은 ν•˜μƒ€λ“œ μˆ˜μž…λ‹ˆλ‹€. μžμ—°μˆ˜ xλ₯Ό μž…λ ₯λ°›μ•„ xκ°€ ν•˜μƒ€λ“œ μˆ˜μΈμ§€ μ•„λ‹Œμ§€ κ²€μ‚¬ν•˜λŠ” ν•¨μˆ˜, solution을 μ™„μ„±ν•΄μ£Όμ„Έμš”.


μ œν•œ 쑰건

* xλŠ” 1 이상, 10000 μ΄ν•˜μΈ μ •μˆ˜μž…λ‹ˆλ‹€.


μž…μΆœλ ₯ 예

μž…μΆœλ ₯ 예 #1
10의 λͺ¨λ“  자릿수의 합은 1μž…λ‹ˆλ‹€. 10은 1둜 λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€λ―€λ‘œ 10은 ν•˜μƒ€λ“œ μˆ˜μž…λ‹ˆλ‹€.


μž…μΆœλ ₯ 예 #2
12의 λͺ¨λ“  자릿수의 합은 3μž…λ‹ˆλ‹€. 12λŠ” 3으둜 λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€λ―€λ‘œ 12λŠ” ν•˜μƒ€λ“œ μˆ˜μž…λ‹ˆλ‹€.


μž…μΆœλ ₯ 예 #3
11의 λͺ¨λ“  자릿수의 합은 2μž…λ‹ˆλ‹€. 11은 2둜 λ‚˜λˆ„μ–΄ 떨어지지 μ•ŠμœΌλ―€λ‘œ 11λŠ” ν•˜μƒ€λ“œ μˆ˜κ°€ μ•„λ‹™λ‹ˆλ‹€.


μž…μΆœλ ₯ 예 #4
13의 λͺ¨λ“  자릿수의 합은 4μž…λ‹ˆλ‹€. 13은 4둜 λ‚˜λˆ„μ–΄ 떨어지지 μ•ŠμœΌλ―€λ‘œ 13은 ν•˜μƒ€λ“œ μˆ˜κ°€ μ•„λ‹™λ‹ˆλ‹€.

arr return
10 true
12 true
11 false
13 false

문제 풀이

do while문을 μ΄μš©ν•œ 풀이방법이닀. sum에 xλ₯Ό 10으둜 λ‚˜λˆˆ λ‚˜λ¨Έμ§€ 값을 더해쀄 것이며 xμ—λŠ” xλ₯Ό 10으둜 λ‚˜λˆˆ κ°’μ˜ 반올림 값을 μ €μž₯λœλ‹€. xκ°€ 0보닀 클 λ™μ•ˆ μ΄λŸ¬ν•œ 연산을 λ°˜λ³΅ν•œλ‹€.

function solution(x) {
    let num = x;
    let sum = 0;
    do {
        sum += x%10;
        x = Math.floor(x/10);
    } while (x>0);

    return !(num%sum);
}

λ‹€λ₯Έ 풀이 방식

좜처 : ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ 슀쿨

ν™”μ‚΄ν‘œ ν•¨μˆ˜μ™€ μ •κ·œν‘œν˜„μ‹μ„ ν™œμš©ν•˜μ—¬ κ°„λ‹¨νžˆ ν‘ΈλŠ” 방식도 μžˆλ‹€.

// λ¬Έμ œκ°€ κ°œνŽΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€. 이둜 인해 ν•¨μˆ˜ κ΅¬μ„±μ΄λ‚˜ ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€κ°€ λ³€κ²½λ˜μ–΄, 과거의 μ½”λ“œλŠ” λ™μž‘ν•˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.
// μƒˆλ‘œμš΄ ν•¨μˆ˜ ꡬ성을 μ μš©ν•˜λ €λ©΄ [μ½”λ“œ μ΄ˆκΈ°ν™”] λ²„νŠΌμ„ λˆ„λ₯΄μ„Έμš”. 단, [μ½”λ“œ μ΄ˆκΈ°ν™”] λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ μž‘μ„± 쀑인 μ½”λ“œλŠ” μ‚¬λΌμ§‘λ‹ˆλ‹€.
function Harshad(n){
  return !(n % (n + "").split("").reduce((a, b) => +b + +a ));
}

// μ•„λž˜λŠ” ν…ŒμŠ€νŠΈλ‘œ 좜λ ₯ν•΄ 보기 μœ„ν•œ μ½”λ“œμž…λ‹ˆλ‹€.
console.log(Harshad(148))

λ°˜μ‘ν˜•

λŒ“κΈ€


Reference Book

JavaScript
HTML
CSS
κ΄‘κ³  μ€€λΉ„μ€‘μž…λ‹ˆλ‹€.