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

문제 링크

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

분석

자연수 n을 뒤집고, 각 자릿수를 정수로 반환하는 문제입니다.

숫자 n을 문자열로 변환하고, 문자열을 뒤집거나 마지막 인덱스부터 접근하는 방법이 있습니다.
하지만 이 방법은 문자열로 변환 및 저장을 해야하므로 메모리가 추가로 사용됩니다.
캐스팅을 2번씩 하고, 문자열을 뒤집어야 하므로 속도또한 느립니다.
해당 문제에서는 문자열을 뒤집지 않고, 마지막 인덱스부터 접근해 바로 push_back함수를 사용하도록 하겠습니다.

나머지와 나누기 연산자를 사용해 n의 1의 자릿수를 계산하는 방법이 있습니다.
이 방법의 경우 추가적인 메모리를 사용하지 않습니다.

풀이

문자열로 캐스팅하는 방법은 다음과 같습니다.

#include <string>
#include <vector>

std::vector<int> solution(long long n) {
    std::vector<int> answer;

    std::string str = std::to_string(n);

    for (int i = str.size() - 1; i >= 0; --i)
    {
        answer.push_back(str[i] - '0');
    }

    return answer;
}

나머지 연산자와 나누기 연산자를 사용한 방법은 다음과 같습니다.

#include <vector>

std::vector<int> solution(long long n) {
    std::vector<int> answer;
    
    while (n)
    {
        answer.push_back(n % 10);
        n /= 10;
    }
    
    return answer;
}

성능 요약

문자열로 캐스팅한 방법의 성능은 다음과 같습니다.

테스트 1 〉 통과 (0.01ms, 4.16MB)
테스트 2 〉 통과 (0.02ms, 4.2MB)
테스트 3 〉 통과 (0.02ms, 4.16MB)
테스트 4 〉 통과 (0.02ms, 4.2MB)
테스트 5 〉 통과 (0.03ms, 4.19MB)
테스트 6 〉 통과 (0.02ms, 4.13MB)
테스트 7 〉 통과 (0.01ms, 4.06MB)
테스트 8 〉 통과 (0.01ms, 4.13MB)
테스트 9 〉 통과 (0.02ms, 4.19MB)
테스트 10 〉 통과 (0.02ms, 3.66MB)
테스트 11 〉 통과 (0.02ms, 4.2MB)
테스트 12 〉 통과 (0.01ms, 4.18MB)
테스트 13 〉 통과 (0.02ms, 4.2MB)


나머지 연산자와 나누기 연산자를 사용한 방법의 성능은 다음과 같습니다.

테스트 1 〉 통과 (0.01ms, 4.15MB)
테스트 2 〉 통과 (0.01ms, 3.67MB)
테스트 3 〉 통과 (0.01ms, 4.2MB)
테스트 4 〉 통과 (0.01ms, 3.64MB)
테스트 5 〉 통과 (0.01ms, 4.16MB)
테스트 6 〉 통과 (0.01ms, 4.2MB)
테스트 7 〉 통과 (0.02ms, 4.02MB)
테스트 8 〉 통과 (0.01ms, 4.21MB)
테스트 9 〉 통과 (0.01ms, 4.02MB)
테스트 10 〉 통과 (0.01ms, 4.2MB)
테스트 11 〉 통과 (0.01ms, 4.2MB)
테스트 12 〉 통과 (0.01ms, 4.13MB)
테스트 13 〉 통과 (0.01ms, 3.65MB)


두 성능을 비교하면 나머지 연산자와 나누기 연산자를 사용한 방법이 속도와 메모리 모두 효율적인 것을 알 수 있습니다.

Programmers 카테고리 내 다른 글 보러가기

댓글남기기