[C++] 백준/Silver/14929. 귀찮아 (SIB)

2025. 2. 27. 21:04·C++/Algorithm

문제: 귀찮아 (SIB) (백준 14929번)

문제 분석

주어진 n개의 정수에 대해, 모든 서로 다른 두 수의 곱의 합을 구하는 문제이다.
즉,

$\text{result} = \sum_{1 \leq i < j \leq n} a_i \times a_j$

직접 모든 쌍을 계산하면 O(n²) 시간 복잡도가 발생하지만, n의 범위가 클 경우 시간 초과가 날 수 있다.

해결 방법

수학적 아이디어:
두 수의 곱의 합은 다음 식으로 변형할 수 있다.

$\left(\sum_{i=1}^{n} a_i\right)^2 = \sum_{i=1}^{n} a_i^2 + 2\sum_{1 \leq i < j \leq n} a_i \times a_j$

따라서,

$\sum_{1 \leq i < j \leq n} a_i \times a_j = \frac{\left(\sum_{i=1}^{n} a_i\right)^2 - \sum_{i=1}^{n} a_i^2}{2}$

이 식을 이용하면 O(n) 시간 내에 결과를 구할 수 있다.

전체 코드

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(0); 
    cin.tie(0);
    
    int n; 
    cin >> n;
    
    vector<int> arr(n);
    long long sum = 0, square_sum = 0;
    
    // 모든 숫자를 입력받으며, 전체 합과 제곱의 합을 계산
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
        sum += arr[i];
        square_sum += 1LL * arr[i] * arr[i];
    }

    // 위의 수식을 이용하여 모든 서로 다른 두 수의 곱의 합을 계산
    long long result = (sum * sum - square_sum) / 2;
    cout << result << '\n';

    return 0;
}

 

'C++ > Algorithm' 카테고리의 다른 글

[C++] 백준/Silver/1487. 물건 팔기  (0) 2025.03.05
[C++] 백준/Silver/15903. 카드 합체 놀이  (0) 2025.03.04
[C++] 백준/Gold/1744. 수 묶기  (0) 2025.02.26
[C++] 백준/Gold/1005. ACM Craft  (0) 2025.02.25
[C++] 백준/Gold/14890. 경사로  (0) 2025.02.24
'C++/Algorithm' 카테고리의 다른 글
  • [C++] 백준/Silver/1487. 물건 팔기
  • [C++] 백준/Silver/15903. 카드 합체 놀이
  • [C++] 백준/Gold/1744. 수 묶기
  • [C++] 백준/Gold/1005. ACM Craft
돼지표
돼지표
https://github.com/wkdgns135
  • 돼지표
    돼지표 개발 스토리
    돼지표
  • 전체
    오늘
    어제
    • 분류 전체보기 (99)
      • C++ (58)
        • Algorithm (52)
      • Python (1)
      • Machine Learning (2)
      • Computer Graphics (4)
        • Curly Hair Simulation (2)
      • GPU Programming (11)
        • CUDA basic (7)
        • CUDA fluidsGL (4)
      • Unreal 5 (20)
        • Troubleshooting (4)
        • FPS Shooting (5)
        • Study (9)
        • EOS (1)
      • Computer Science (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    그리디 알고리즘
    CS
    unreal 5
    BFS
    FPS
    Algorithm
    Rendering Pipeline
    CUDA
    수학
    Fluid Simulation
    GPU Programming
    C++
    아이작 맵 생성
    자료 구조
    OpenGL
    그래프 탐색
    위상 정렬
    UE5
    구현
    dp
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
돼지표
[C++] 백준/Silver/14929. 귀찮아 (SIB)
상단으로

티스토리툴바