티스토리 뷰

백준/실버

[백준 13900번] 순서쌍의 곱의 합 (C++)

게임개발기원 2023. 7. 4. 22:03

문제링크 : https://www.acmicpc.net/problem/13900

 

13900번: 순서쌍의 곱의 합

첫 번째 줄에는 입력 받을 정수의 개수 N(2 ≤ N ≤ 100,000) 두 번째 줄에는 N 개의 정수가 주어진다. 이때 입력 받는 정수들의 범위는 0이상 10,000 이하이다.

www.acmicpc.net

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;

ll arr[100001];
ll sum = 0;

int main()
{
    ios_base::sync_with_stdio(0); 
	cin.tie(0);
    
    int N;
    cin >> N;

    ll result = 0;

    for(int i=1; i<=N; i++)
    {
        cin >> arr[i];
        sum+=arr[i]; //누적합
    }

    for(int i=1; i<=N; i++)
    {
        result += (sum-arr[i]) * arr[i]; //자기 자신 제외 곱해지는 값
        sum-=arr[i]; //계산한 값 지우기
    }

    cout << result; 

    return 0;
}

누적합 문제이다.

계산함에 따라서 수의 범위가 커져서 관련된 변수를 long long으로 선언해야 한다.

 

처음에 누적합을 구해놓고, 이 합에서 자기 자신을 빼고 곱해준 값을 결과값에 더해준다.

(현재값을 기준으로 나머지 값들과 전부 곱해주고 더해주기 때문에 더해주고 곱해줘도 된다.)

이렇게 계산한 대상 값을 누적합 부분에서 지워줘야 중복값이 발생하지 않는다.

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함