안녕하세요. 오늘은 파스칼의 삼각형에서 합을 구해볼 거예요.

문제

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

아이디어

이 삼각형을 정삼각형이 아닌 직각삼각형으로 생각해봅시다.
모든 수들을 왼쪽으로 쭉 밀면 그렇게 됩니다.
이러면 좌표를 매기기도 쉬워지므로 그냥 하면 됩니다.
R<=i<R+w이고 C<=j<=C+(i-R)이면 그 값을 더해주면 됩니다.

소스코드

#include <iostream>
#define ll long long
using namespace std;

int main(void)
{
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    ll tri[33][33] = { 0 }, R, C, W, i, j, sum = 0;
    tri[0][0] = 1;

    cin >> R >> C >> W;
    for (i = 1; i <= R + W - 1; i++)
    {
        for (j = 1; j <= i; j++)
        {
            tri[i][j] = tri[i - 1][j - 1] + tri[i - 1][j];
            if (R <= i && i < R + W)
            {
                if (C <= j && j <= C + (i - R))
                {
                    sum += tri[i][j];
                }
            }
        }
    }
    cout << sum;
}


감사합니다.

0개의 댓글