큰 숫자들이 담긴 배열 nums가 있다고 가정해 봅시다. 각 숫자는 (-231 ~ 231 - 1) 범위에 속하며, 우리의 목표는 이 숫자들을 모두 더한 합계를 구하는 것입니다.
예를 들어 입력이 nums = [5000000003, 3000000005, 8000000007, 2000000009, 7000000011]과 같다면, 출력 결과는 25000000035가 됩니다.
접근 방법
여기서 주목해야 할 점은 개별 숫자 하나하나가 이미 int 자료형의 최대 표현 범위(약 21억)를 초과할 수 있다는 것입니다. 따라서 오버플로우를 방지하려면 배열의 각 요소와 누적합을 저장할 변수 모두 long long int 자료형을 사용해야 합니다.
이 문제는 다음 절차를 통해 해결할 수 있습니다:
- x := 0으로 초기화합니다.
- i := 0부터 시작하여 i < nums의 크기를 만족하는 동안 i를 1씩 증가시키며 다음 작업을 반복합니다.
- x := x + nums[i]
- x를 반환합니다.
예제 코드
아래 구현 예제를 통해 더 잘 이해해 보겠습니다.
#include <iostream>
#include <vector>
using namespace std;
long long int solve(vector<long long int> nums){
long long int x = 0;
for(int i=0; i<nums.size(); i++){
x = x + nums[i];
}
return x;
}
int main(){
vector<long long int> nums = {5000000003, 3000000005, 8000000007, 2000000009, 7000000011};
cout << solve(nums);
}
입력
{5000000003, 3000000005, 8000000007, 2000000009, 7000000011}
출력
25000000035