ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • #AIL_23.11.10 // Programmers_자연수 뒤집어 배열로 만들기
    AIL( Algorithm I Learned) 2023. 11. 10. 19:26

    ## AIL_자연수 뒤집어 배열로 만들기

    ***문제 설명
    자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

    ***제한 조건
    n은 10,000,000,000이하인 자연수입니다.

    ***입출력 예
    n return
    12345 [5,4,3,2,1]

    ## solution.JavaScript

    1. 문제의 접근 방식

    주어진 문제는 자연수 n을 뒤집어서 각 자리 숫자를 원소로 갖는 배열을 리턴하는 것입니다.

     

    1) 자연수 n을 문자열로 변환하여 각 자리 숫자를 문자로 분리합니다.

     

    2) 분리된 문자를 다시 숫자로 변환합니다. 

     

    3) 변환된 숫자 배열을 뒤집습니다. 

     

    반복문을 사용하여 자리수를 뒤집는 방법도 있지만 간결한 풀이를 위해 위에 방식을 사용하겠습니다. 

     


    2. 문제풀이

    function solution(n) {
     return String(n).split("").map((num) => Number(num)).reverse();
    };
    /*
    테스트 1
    입력값 〉	12345
    기댓값 〉	[5, 4, 3, 2, 1]
    실행 결과 〉	테스트를 통과하였습니다.
    */

     

    1) `String(n)`

    주어진 자연수 `n`을 문자열로 변환합니다. 이는 각 자리 숫자를 문자로 분리하기 위한 첫 단계입니다. 

     

    2) `.split("")` 

    문자열을 각각의 문자로 분리합니다. 이 때, 빈 문자열을 기준으로 분리하면 각 자리 숫자가 배열의 원소로 들어갑니다. 

     

    3) `.map((num) => Number(num))`

    각 문자를 다시 숫자로 변환합니다. 이를 통해 숫자로 이루어진 배열을 얻습니다. 

     

    4) `reverse()`

    얻어진 숫자 배열을 뒤집습니다. 이렇게 하면 주어진 자연수의 각 자리 숫자를 거꾸로 된 순서로 얻을 수 있습니다. 


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

    function solution(n) {
        // 문자풀이
        // return (n+"").split("").reverse().map(v => parseInt(v));
    
        // 숫자풀이
        var arr = [];
    
        do {
            arr.push(n%10);
            n = Math.floor(n/10);
        } while (n>0);
    
        return arr;
    }
    /*
    테스트 1
    입력값 〉	12345
    기댓값 〉	[5, 4, 3, 2, 1]
    실행 결과 〉	테스트를 통과하였습니다.
    */

     

    주어진 함수 풀이는 자연수 `n`을 뒤집어서 각 자리 숫자를 배열로 반환하는 두 가지 방법을 보여줍니다. 

     

    ***문자열 풀이 

    return (n+"").split("").reverse().map(v => parseInt(v));

     

    1. `(n+"")`

    자연수 `n`을 문자열로 변환합니다. 

     

    2. `.split("")`

    문자열을 각각의 문자로 분리합니다. 이를 통해 각 자리 숫자가 배열의 원소로 들어갑니다. 

     

    3. `.revers()`

    배열을 뒤집습니다. 

     

    4. `.map(v => parseInt(v))`

    각 문자를 숫자로 변환합니다.  `parseInt`를 사용하여 문자열을 숫자로 변환하고, 뒤집은 배열을 얻습니다. 

     

    *** 숫자 풀이

    var arr = [];
    do {
        arr.push(n % 10);
        n = Math.floor(n / 10);
    } while (n > 0);
    return arr;

     

    1. `var arr = []`

    빈 배열을 생성합니다. 이 배열에 자리수를 뒤집어서 담을 것입니다. 

     

    2. `do { ... } while (n > 0)`: `do-while`루프를 사용하여 다음을 반복합니다. 

     

    // `arr.push(n%10)`

    자연수 `n`을 10으로 나눈 나머지(마지막 자리 숫자)를 배열에 추가합니다. 

     

    // `n = Math.foor(n / 10)`

    자연수 `n`을 10으로 나눈 몫을 새로운 `n`으로 갱신합니다. 

     

    3. 반환

    뒤집어진 배열을 반환합니다. 


    # `do-while`에 대하여

    `do-while`문은 조건을 먼저 검사하지 않고 루프 몸체를 최소 한 번 실행하는 반복문입니다. `do` 키워드 다음에 중괄호 `{ ... }` 로 감싸진 몸체가 위치하고, 그 뒤에 `while` 키워드와 조건이 따라옵니다. 루프 몸체가 한 번 실행된 후에 조건을 검사하고, 조건이 `true`인 동안 계속해서 반복됩니다. 

     

    `do-while`의 기본 구조는 다음과 같습니다. 

    do {
      // 실행할 코드 블록
    } while (조건);

     

    예를 들어, 아래의 코드는 1부터 5까지의 숫자를 출력하는 `do-while` 루프를 나타냅니다. 

    var i = 1;
    
    do {
      console.log(i);
      i++;
    } while (i <= 5);

     

    이 루프는 처음에 `i`가 1이기 때문에 일단 루프 몸체가 실행되고, 그 후에 `i`가 5까지 증가하면서 조건을 만족하지 않을 때까지 계속 반복됩니다. 따라서 결과는 다음과 같습니다. 

    1
    2
    3
    4
    5

     

    `do-while` 문은 조건을 먼저 검사하지 않고 최소한 한 번은 루프 몸체를 실행해야 하는 상황에서 유용합니다. 

     

     

Designed by Tistory.