[ALOG] 백준 13900 - 순서쌍의 곱의 합
문제
N개의 정수 중 서로 다른 위치의 두 수를 뽑는 모든 경우의 두 수의 곱의 합을 구하라.
예를 들어 N = 3이고 주어진 정수가 2, 3, 4일 때, 두 수를 뽑는 모든 경우는 (2, 3), (2, 4), (3, 4)이며 이때 각각의 곱은 6, 8, 12이다. 따라서 총합은 26이다.
출력
코드
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int count; cin >> count;
vector<int> numberList(count);
for (int input, i = 0; i < count; ++i)
{
cin >> input;
numberList[i] = input;
}
long long int sum = 0;
long long int result = 0;
for (int i = count - 1; i > 0; --i)
{
sum += numberList[i];
result += sum * numberList[i - 1];
}
cout << result;
return 0;
}
결론
그냥 생각하면 O(N^2)로 생각하기 쉽지만, 좀 더 고민해보면,
분배법칙을 사용해서 O(N)시간에 가능하다.
Author And Source
이 문제에 관하여([ALOG] 백준 13900 - 순서쌍의 곱의 합), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@co22oc/ALOG-백준-13900-순서쌍의-곱의-합저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)