본문 바로가기

BAEKJOON/수학

백준 2721번 [삼각수의 합](C++) -yes6686- 티스토리

728x90
SMALL

백준 문제 풀이: 2721 (삼각수의 합)


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

문제 설명:

삼각수는 다음과 같은 공식으로 정의됩니다: T(n) = n × (n + 1) / 2 주어진 숫자 n에 대해, 다음 식의 합을 구해야 합니다: i × T(i + 1) (1 ≤ i ≤ n) 여러 테스트 케이스에 대해 결과를 출력하세요.


문제 해결 코드


#include <iostream>
using namespace std;

// 삼각수를 구하는 함수
int T(int n) {
    return (n * (n + 1)) / 2; // T(n) = n × (n + 1) / 2
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    int t; // 테스트 케이스 개수
    cin >> t;

    while (t--) {
        int n;
        cin >> n; // 입력값 n
        int sum = 0;

        // i × T(i + 1)의 합 계산
        for (int i = 1; i <= n; i++) {
            sum += i * T(i + 1);
        }

        // 결과 출력
        cout << sum << '\n';
    }

    return 0;
}

코드 설명

코드의 주요 로직과 사용된 알고리즘 설명:

  • 삼각수 공식: T(n) = n × (n + 1) / 2를 사용하여 삼각수를 계산합니다.
  • 합 계산: - 각 i에 대해 i × T(i + 1)를 더해 나갑니다.
  • 시간 복잡도 분석: - 각 테스트 케이스에서 n번 반복문이 수행되므로 시간 복잡도는 **O(n)**입니다.
  • 입출력 최적화: - ios::sync_with_stdio(false)cin.tie(NULL)를 사용해 빠른 입출력을 수행합니다.

결과

주어진 n에 대해 i × T(i + 1)의 합을 정확히 계산하여 출력합니다.

  • 입력 예시:
    2  
    3  
    4
  • 출력 예시:
    26  
    50

다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!

728x90
LIST