ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • #AIL_23.11.18 // Programmers_자릿수 더하기
    AIL( Algorithm I Learned) 2023. 11. 18. 23:44

    ## AIL_자릿수 더하기 

    ***문제 설명
    자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

    ***제한사항
    N의 범위 : 100,000,000 이하의 자연수

    ***입출력 예
    N answer
    123 6
    987 24

    ***입출력 예 설명
    입출력 예 #1// 문제의 예시와 같습니다.
    입출력 예 #2 // 9 + 8 + 7 = 24이므로 24를 return 하면 됩니다.

    ## solution.JavaScript

    1. 문제의 접근 방식

    주어진 문제는 숫자를 문자열로 변환하고, 각 자릿수를 분해한 후, 각 자릿수를 정수형으로 변환하여 총합을 계산하는 방법입니다.  


    2. 문제풀이

    function solution(n) {
        let nStr = n.toString().split("").map(Number)
        let sum = 0;
    
        for (let i = 0; i < nStr.length; i++) {
            sum += nStr[i]
        }
    
        return sum
    }
    /*
    테스트 1
    입력값 〉	123
    기댓값 〉	6
    실행 결과 〉	테스트를 통과하였습니다.
    테스트 2
    입력값 〉	987
    기댓값 〉	24
    실행 결과 〉	테스트를 통과하였습니다.
    */

     

    1. `n`을 `toString()` 메서드를 사용하여 문자열로 변환합니다. 이렇게 하면 각 자릿수에 쉽게 접근할 수 있습니다. 

     

    2. 문자열로 변환된 `n`을  `split("")`을 사용하여 각 자릿수를 배열로 분리합니다.

    (`n.toString().spl)it("")`)

     

    3. `map(Number)`를 사용하여 각 문자열을 숫자로 변환합니다.

     

    4. 반복문을 사용하여 `nStr`을 순회합니다. 반복문에서는 `parseInt()`함수를 사용하여 각 자릿수를 정수로 변환하고, 이 값을 `sum` 변수에 더해 자릿수의 합을 계산합니다.

     

    4. 마지막으로, 계산된 합인 `sum`을 반환하여 각 자릿수의 합을 구합니다. 


    3. 다른사람의 문제풀이 및 접근방식 분석

    function solution(n) {
        return String(n) // 주어진 숫자를 문자열로 변환
            .split("") // 각 자릿수를 배열로 분리
            .reduce((acc, curr) => acc + Number(curr), 0); // 각 자릿수를 순회하며 총합 계산
    }
    /*
    테스트 1
    입력값 〉	123
    기댓값 〉	6
    실행 결과 〉	테스트를 통과하였습니다.
    테스트 2
    입력값 〉	987
    기댓값 〉	24
    실행 결과 〉	테스트를 통과하였습니다.
    */

     

    1. `String(n)`을 사용하여 입력된 자연수 `n`을 문자열로 변환합니다. 이렇게 하면 각 자릿수에 쉽게 접근할 수 있습니다. 

     

    2. `split("")`을 사용하여 문자열을 각 자릿수 별 배열로 분리합니다. 이 때, 각 문자는 배열의 요소로 변환됩니다. 

     

    3. `reduce()`를 사용하여 배열의 각 요소를 순회합니다. 초기값 `0`으로 시작하여 배열의 각 요소를 숫자로 변환한 뒤, 이전까지의 누적 값에 더합니다. 

    ** `acc`은 누적값을 나타내며, `curr`은 현재 배열 요소를 나타냅니다. 

    ** 'Number(curr)'을 통해 각 문자열 요소를 숫자로 변환하고, `acc + Number(curr)`를 통해 누적된 값을 갱신합니다. 

     

    쉽게 정리하면 위 방법은 문자열 변환 후 배열로 분리하여 각 자릿수를 더하는 것으로 `reduce()` 메서드를 잘 사용한 예시라고 볼 수 있습니다. 


    # String()과 toString()의 차이점 

    *** `String()` 함수

    ** `String()` 함수는 JavaScript의 전역 함수입니다. 

    ** 모든 데이터 타입을 문자열로 변환합니다. 

    ** 어떤 값을 문자열로 바꾸고 싶을 때 사용됩니다. 

     

    예시)

    let num = 123;
    let strNum = String(num); // "123"
    
    let bool = true;
    let strBool = String(bool); // "true"

    *** `toString()` 메서드

    ** `toString() `은 JavaScript의 모든 객체가 가지고 있는 메서드입니다. 

    ** 위 메서드는 해당 객체를 나타내는 문자열을 반환합니다.

    ** 기본데이터 타입(숫자, 문자열, 불리언)을 객체로 변환한 경우에도 `toString()` 메서드를 사용할 수 있습니다. 

     

    예시)

    let num = 123;
    let strNum = num.toString(); // "123"
    
    let arr = [1, 2, 3];
    let strArr = arr.toString(); // "1,2,3"

    =>>> ***간단 정리

    `String()` 함수는 어떤 값이든 문자열로 변환하고 싶을 때 사용하며, `toString()` 메서드는 객체에서 해당 객체를 나타내는 문자열을 얻고자 할 때 사용합니다. 대부분의 경우, 숫자, 문자열 또는 불리언 값에 `toString()` 메서드를 직접 사용하지 않고, `String()`  함수를 사용하는 것이 더 편리하고 명확합니다.


    # reduce() 메서드란?

    `reduce()`메서드는 배열의 각 요소를 이용하여 하나의 결과값을 도출하는데 사용됩니다. 이 메서드는 네 가지의 매개변수를 받아 동작합니다. 

     

    *** 콜백함수

    `reduce()`메서드의 가장 중요한 매개변수로, 배열 요소마다 호출되는 함수입니다. 이 함수는 4가지 매개변수를 받습니다.

     

    1. `accumulator`(누적기)

    누적된 결과를 저장하는 변수로, 콜백 함수의 반환값이 여기에 누적됩니다. 

     

    2. `currentValue`(현재 값)

    배열에서 처리 중인 현재 요소의 인덱스입니다. 

     

    3. `currentIndex`(현재 인덱스,선택적)

    현재 처리중인 요소의 인덱스입니다. 

     

    4. `array`(배열, 선택적)

    `reduce()`를 호출한 배열 자체입니다. 


    *** 초기값(Initial Value, 선택적)

    초기값을 제공하는 매개변수입니다. 초기값을 지정하지 않으면 배열의 첫 번째 요소가 사용됩니다. 배열이 비어있는 경우 초기값이 없으면 오류를 발생시킵니다. 


    *** `reduce()` 메서드의 동작

    1. `reduce()`는 배열의 첫 번째 요소부터 마지막 요소까지 순차적으로 순회합니다. 

     

    2. 콜백 함수가 각 요소에 대해 호출되며, 첫 번째 호출시에는 초기값 또는 배열의 첫 번째 요소가 `accumulator`에 할당됩니다. 

     

    3. 콜백 함수가 반환하는 값은 다음 순회에 사용될 `accumulator`가 됩니다. 

     

    4. 모든 요소를 순회한 후, `reduce()`는 최종적으로 누적된 결과를 반환합니다.

     

    예시)

    let numbers = [1, 2, 3, 4, 5];
    
    let sum = numbers.reduce((accumulator, currentValue) => {
        return accumulator + currentValue;
    }, 0);
    
    console.log(sum); // 출력 결과: 15 (1 + 2 + 3 + 4 + 5)

     

    위 코드에서 `reduce()` 메서드는 초기값을 0으로 설정하고 배열의 모든 요소를 더하여 총합을 계산합니다. 이때 각 요소는 콜백 함수에 의해 누적되고, 최종적으로 총합 15를 반환합니다.

     

     

     

Designed by Tistory.