본문 바로가기
온라인저지

[BOJ] 13900번: 순서쌍의 곱의 합

by plzfday 2018. 7. 27.

https://www.acmicpc.net/problem/13900

아... 그냥 재귀 함수로 돌아도 될 텐데 문제 풀 때 이상하게 규칙 찾느라 이렇게 풀었다.

2, 3, 4면 

2 * 3 + 3 * 4 + 2 * 4 -> 2(3 + 4) + 3 * 4 이렇게 묶어서 생각했더니 아래 코드가 나왔다. 16ms를 받았는데 더 짧고 빠르게 할 수 있다.

#include <cstdio>
#include <algorithm>
using namespace std;

int n;
int number[100001];
long long sum = 0;
long long sx = 0;

int main()
{
    scanf("%d", &n);
    for (int i = 0; i < n; ++i)
        scanf("%d", &number[i]);
    sort(number, number + n);
    for (int i = 0; i < n; ++i)
        sum += number[i];

    for (int i = 0; i < n - 1; ++i)
    {
        sum -= number[i];
        sx += (number[i] * sum);
    }

    printf("%lld\n", sx);

    return 0;
}

이렇게도 풀 수 있습니다.

#include <iostream>

using namespace std;
typedef long long ll;
ll N, data, sum, ans;
int main()
{
    ios_base::sync_with_stdio(false);
    cin >> N;
    for (int i = 0; i < N; ++i)
    {
        cin >> data;
        ans += sum * data;
        sum += data;
    }
    cout << ans;
    return 0;
}

 

'온라인저지' 카테고리의 다른 글

[BOJ] 2504번: 괄호의 값  (2) 2018.07.27
[BOJ] 5845번: Perimeter  (0) 2018.07.27
[BOJ] 10540번: KLOPKA  (0) 2018.07.27
[BOJ] 11508번: 2+1 세일  (0) 2018.07.27
[BOJ] 9095번: 1, 2, 3 더하기  (0) 2018.07.27
[BOJ] 3029번: 경고  (0) 2018.07.27

댓글