[Programmers] 자연수 뒤집어 배열로 만들기

2022. 9. 26. 06:25기록/Programmers

    목차

문제 설명

자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요.

예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

 

제한 조건

- n은 10,000,000,000이하인 자연수입니다.

 

입출력 예

n return
12345 [5, 4, 3, 2, 1]

나의 문제 풀이

function solution(n) {
    let answer = n.toString().split("").reverse().map((num) => parseInt(num));
    return answer;
}

먼저 toString 메소드를 통해 주어진 자연수 n을 문자열로 변환하고, split 함수를 사용해 문자열을 배열의 원소로 쪼개었다.

그 후 reverse 함수를 사용해 배열의 순서를 거꾸로 뒤집었다.

여기서 배열의 원소들의 데이터 타입은 문자이기 때문에, map 으로 하나씩 꺼내서 parseInt 로 숫자로 바꾸어 리턴해 주었다.

 

다른 사람의 문제 풀이

function solution(n) {
    var arr = [];

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

    return arr;
}

지난 번에 자릿수 더하기에서 보았던 로직과 비슷하다.

 

주어진 수를 문자로 변환하지 않고 숫자 그대로 나머지 값을 이용해서 푼 코드이다.

do ~ while 조건문을 사용하여 처음에는 주어진 수가 0 보다 큰지 체크하지 않는다.

 

arr.push(n % 10) 를 통해서 가장 마지막 자리의 숫자를 배열의 끝에 넣어준다.

Math.floor(n / 10) 을 통해서 주어진 수에서 가장 마지막 자리 수를 삭제하고 난 후

0 보다 크다면 반복문을 계속해서 실행하면서 마지막 자리의 숫자를 하나씩 배열에 넣어주게 된다.

배열에는 마지막 자리의 숫자부터 넣어주기 때문에 자동으로 순서가 거꾸로가 될 수 있다.

 

배열의 끝에서 부터 요소를 넣어주는 push() 가 아니라 , 배열의 앞에서 부터 요소를 넣어주는 unshift() 를 사용하면

주어진 수를 순서대로 배열의 원소로 만들 경우에 적용할 수 있겠다는 생각이 들었다.

배열에 관련된 함수는 매우 많기 때문에, 잘 정리해 두고 문제해결에 적용할 수 있도록 해야겠다.