๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm_JS

์•Œ๊ณ ๋ฆฌ์ฆ˜(10) : ์ž๋ฆฟ์ˆ˜ ๋”ํ•˜๊ธฐ _ Lv.1

by oranssy 2022. 11. 6.
728x90
๋ฐ˜์‘ํ˜•

โญ๏ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜(10) : ์ž๋ฆฟ์ˆ˜ ๋”ํ•˜๊ธฐ _ Lv.1 โญ๏ธ


01. ๋ฌธ์ œ ์„ค๋ช…

๐Ÿงฉ ์ž์—ฐ์ˆ˜ N์ด ์ฃผ์–ด์ง€๋ฉด, N์˜ ๊ฐ ์ž๋ฆฟ์ˆ˜์˜ ํ•ฉ์„ ๊ตฌํ•ด์„œ returnํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์„ธ์š”.
๐Ÿงฉ ์˜ˆ๋ฅผ ๋“ค์–ด N = 123์ด๋ฉด 1 + 2 + 3 = 6์„ returnํ•˜๋ฉด ๋˜๊ณ , N = 987์ด๋ฉด 9 + 8 + 7 = 24์ด๋ฏ€๋กœ 24๋ฅผ returnํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
๐Ÿ”’ ์ œํ•œ ์กฐ๊ฑด : N์˜ ๋ฒ”์œ„ : 100,000,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜

02. " solution.js " ๋ฌธ์ œ ํ’€์–ด๋ณด๊ธฐ

๐Ÿ’ก ์ˆซ์ž N์„ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊พธ๊ณ , ํ•œ ๋ฌธ์ž์”ฉ ๊ตฌ๋ถ„ํ•œ ๋’ค์— ๊ฐ๊ฐ์˜ ๋ฌธ์ž๋ฅผ ๋ชจ๋‘ ๋”ํ•ด๋ณด์ž.

const big = [123];
const huge = [987];

function solution(n) {
    return (n + '').split('').reduce((acc, cur) => acc + Number(cur), 0);
}         ์ˆซ์ž n + '' ๋นˆ๋ฌธ์ž์—ด -> ๋ฌธ์ž์—ด n ๋ฐ˜ํ™˜
        // js์—์„œ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ํ”ผ์—ฐ์‚ฐ์ž ์ค‘ ์–ด๋Š ํ•˜๋‚˜๊ฐ€ ๋ฌธ์ž์—ด์ด๋ฉด ๋‹ค๋ฅธ ํ”ผ์—ฐ์‚ฐ์ž๋„ ๋ฌธ์ž์—ด๋กœ ์œ ํ˜•์ด ๋ณ€ํ™˜๋˜์–ด, ๋ฌธ์ž์—ด์„ ํ•ฉ์นœ ๊ฐ’์ด ๋ฐ˜ํ™˜๋จ.
        // '' ๋นˆ๋ฌธ์ž์—ด์€ ๋ฐ˜ํ™˜๊ฐ’์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ , ๊ทธ์ € ๋‹ค๋ฅธ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋ฌธ์ž์—ด๋กœ ํ˜•๋ณ€ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ํ•จ.
console.log(solution(big))
console.log(solution(huge))

   ___ ์ฐธ๊ณ ํ•˜๊ธฐ ___
  `1   String.prototype.split( ) : ๋ถ„ํ•  ๊ธฐ์ค€์— ๋”ฐ๋ผ ๋ฌธ์ž์—ด์„ ๋ถ„ํ• ํ•˜์—ฌ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  `2   Array.prototype.reduce( ) : ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ฃผ์–ด์ง„ (reducer) ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

03. ๋‹ค๋ฅธ ํ’€์ด ์•Œ์•„๋ณด๊ธฐ

# 1) do ...while๋ฌธ๊ณผ Math.floor( ) ํ™œ์šฉํ•˜๊ธฐ

function solution(n){
    let sum = 0;

    do {
        sum += n % 10;          // ์ผ์˜ ์ž๋ฆฌ ์ˆซ์ž
        n = Math.floor(n/10);

    } while(n > 0)              // ( n > 0 )์ด ๊ฑฐ์ง“์ธ ๊ฒฝ์šฐ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต

    return sum;
}
console.log(solution(123))
console.log(solution(987))

   ___ ์ฐธ๊ณ ํ•˜๊ธฐ ___
  `1   do ... while ๋ฌธ : ํ…Œ์ŠคํŠธ ์กฐ๊ฑด์ด ๊ฑฐ์ง“์œผ๋กœ ํ‰๊ฐ€๋  ๋•Œ๊นŒ์ง€ ์ง€์ •๋œ ๊ตฌ๋ฌธ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฃจํ”„๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  `2   Math.floor( ) : ์ฃผ์–ด์ง„ ์ˆซ์ž์™€ ๊ฐ™๊ฑฐ๋‚˜ ์ž‘์€ ์ •์ˆ˜ ์ค‘์—์„œ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. โ˜› ๋‚ด๋ฆผ

 

# 2) split( )๊ณผ forEach๋ฌธ ํ™œ์šฉํ•˜๊ธฐ

function solution(n) {
    let arr = n.toString().split('');
    let sum = 0;
    
    arr.forEach(element => {
        sum += parseInt(element);       // ๋ฐฐ์—ด์˜ ๋ฌธ์ž ์š”์†Œ๋ฅผ ์ˆซ์ž๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๋”ํ•˜๊ธฐ
    });
    return sum;
}
console.log(solution(123))
console.log(solution(987))

   ___ ์ฐธ๊ณ ํ•˜๊ธฐ ___
  `1   Array.prototype.toString( ) : ์ง€์ •๋œ ๋ฐฐ์—ด ๋ฐ ๊ทธ ์š”์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  `2   Array.prototype.forEach( ) : ์ฃผ์–ด์ง„ ํ•จ์ˆ˜๋ฅผ ๋ฐฐ์—ด ์š”์†Œ ๊ฐ๊ฐ์— ๋Œ€ํ•ด ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  `3   parseInt( ) : ๋ฌธ์ž์—ด ์ธ์ž๋ฅผ ์ˆซ์ž๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. Number( )์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋ฉฐ,
                               ์ฐจ์ด์ ์„ ์‚ดํŽด๋ณด์ž๋ฉด Number( )์€ ๋ฌธ์ž์—ด์— ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ๋ฌด์กฐ๊ฑด NaN ๊ฐ’์ด ์ €์žฅ๋˜๊ณ 
                               parseInt( )๋Š” ๋ฌธ์ž์—ด์ด ์ˆซ์ž๋กœ ์‹œ์ž‘ํ•˜๊ณ  ๋ฌธ์ž๊ฐ€ ๊ปด์žˆ์„ ๊ฒฝ์šฐ ๋ฌธ์ž ์ „๊นŒ์ง€๋งŒ ์ˆซ์ž๋กœ ํ˜•๋ณ€ํ™˜ ํ›„ ์ €์žฅ๋œ๋‹ค๋Š” ๊ฒƒ.

 

# 3) split( )๊ณผ map ํ™œ์šฉํ•˜๊ธฐ

function solution(n){
    let answer = 0;

    String(n).split('').map(data => answer += parseInt(data));

    return answer;
}
console.log(solution(123))
console.log(solution(987))

   ___ ์ฐธ๊ณ ํ•˜๊ธฐ ___
  `1   String( ) : ์ˆซ์ž๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  `2   Array.prototype.map( ) : ๋ฐฐ์—ด ๋‚ด์˜ ๋ชจ๋“  ์š”์†Œ ๊ฐ๊ฐ์— ๋Œ€ํ•ด, ์ฃผ์–ด์ง„ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์•„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

# 4) for๋ฌธ๊ณผ charAt( ) ํ™œ์šฉํ•˜๊ธฐ

function solution(n){
    let answer = 0;
    n = "" + n;

    for(let i=0; i < n.length; i++){
        answer += n.charAt(i) * 1;          // ์ˆซ์ž์˜ ์œ ๋‹ˆ์ฝ”๋“œ ๊ฐ’์€ ์•Œ์•„๋ณด๋ ค๋Š” ์ˆซ์ž ๊ทธ๋Œ€๋กœ์˜ ๊ฐ’.
    }                                                         // 1์˜ ์œ ๋‹ˆ์ฝ”๋“œ ๊ฐ’ = 1 , 3์˜ ์œ ๋‹ˆ์ฝ”๋“œ ๊ฐ’ = 3

    return answer;
}
console.log(solution(123))
console.log(solution(987))

   ___ ์ฐธ๊ณ ํ•˜๊ธฐ ___
  `1   for๋ฌธ : ๊ด„ํ˜ธ ์•ˆ์˜ ์‹์„ ๋ฐ˜๋ณต ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  `2   String.prototype.charAt( ) : ๋ฌธ์ž์—ด์—์„œ ํŠน์ • ์ธ๋ฑ์Šค์— ์œ„์น˜ํ•˜๋Š” ์œ ๋‹ˆ์ฝ”๋“œ ๋‹จ์ผ๋ฌธ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

# 5) ์‚ผํ•ญ์—ฐ์‚ฐ์ž ํ™œ์šฉํ•˜๊ธฐ

function solution(n, a=0, b=0) {
    return String(n).length == a ? b : solution(n, a+1, b +=  String(n)[a] * 1 );
}       // ๊ธธ์ด๊ฐ’์ด 0์ด๋ฉด 0์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ??
console.log(solution(123))
console.log(solution(987))

   ___ ์ฐธ๊ณ ํ•˜๊ธฐ ___
  `1   ์กฐ๊ฑด(์‚ผํ•ญ) ์—ฐ์‚ฐ์ž : ์•ž์—์„œ๋ถ€ํ„ฐ ์กฐ๊ฑด๋ฌธ, ๋ฌผ์Œํ‘œ(?), ์กฐ๊ฑด๋ฌธ์ด ์ฐธ(truthy)์ผ ๊ฒฝ์šฐ ์‹คํ–‰ํ•  ํ‘œํ˜„์‹, ์ฝœ๋ก (:), ์กฐ๊ฑด๋ฌธ์ด ๊ฑฐ์ง“(falsy)์ผ ๊ฒฝ์šฐ ์‹คํ–‰ํ•  ํ‘œํ˜„์‹์ด ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€