[프로그래머스][C++] 자연수 뒤집어 배열로 만들기
자연수 뒤집어 배열로 만들기
문제 링크
분석
자연수 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)
두 성능을 비교하면 나머지 연산자와 나누기 연산자를 사용한 방법이 속도와 메모리 모두 효율적인 것을 알 수 있습니다.
댓글남기기