-
백준 16395번 : 파스칼의 삼각형 (C 언어)c c++ 언어 공부 2023. 9. 5. 10:46
Code:
123456789101112131415161718192021222324252627282930#include <stdio.h>int dp[31][31] = { 0, };int binomial(int n, int r){for (int i = 0; i < n ; i++){int temp = (i > r) ? r : i;for (int j = 0; j <= temp; j++){if (j == 0 || i == j){dp[i][j] = 1;}else{dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];}}}return dp[n-1][r-1];}int main() {int n, k;scanf("%d %d", &n, &k);int cnt = binomial(n, k);printf("%d", cnt);}cs 문제 설명: 주어진 문제에서는 파스칼의 삼각형을 사용하여 이항 계수를 계산하고, n번째 행에서 k번째 수를 출력하는 프로그램을 작성해야 합니다. 파스칼의 삼각형은 다음과 같이 생성됩니다.
- 첫 번째 행은 1로 시작합니다.
- 두 번째 행부터는 양 끝의 값이 1이고, 나머지 수는 바로 위 행의 인접한 두 수를 더한 값입니다.
- n번째 행의 k번째 수는 C(n-1, k-1)로 계산됩니다.
코드 설명:
- int dp[31][31] = { 0, };: 2차원 배열 dp를 선언하고 초기화합니다. dp[i][j]는 i번째 행에서 j번째 수를 저장하기 위한 배열입니다.
- int binomial(int n, int r): 이항 계수 C(n-1, k-1)을 계산하는 함수를 정의합니다. 이 함수는 파스칼의 삼각형을 생성하면서 값을 계산합니다.
- 두 개의 반복문을 사용하여 파스칼의 삼각형을 생성합니다. 외부 반복문은 행을 나타내고, 내부 반복문은 해당 행의 열을 나타냅니다.
- 각 위치 (i, j)에서, 만약 j가 0이거나 i와 j가 같다면, 그 값은 1입니다.
- 그 외의 경우, 현재 위치 (i, j)의 값은 바로 위 행의 인접한 두 수 (i-1, j-1)과 (i-1, j)을 더한 값입니다.
- 최종적으로 dp[n-1][r-1]을 반환하여 이항 계수를 구합니다.
'c c++ 언어 공부' 카테고리의 다른 글
백준 1926번 : 그림(C 언어) (0) 2023.09.07 백준 10797번 : 10부제(C 언어) (0) 2023.09.06 백준 14490번 : 백대열(C 언어) (0) 2023.09.05 백준 16435번 : 스네이크버드 (C 언어) (0) 2023.09.04 백준 1526번 : 가장 큰 금민수 (C 언어) (0) 2023.09.04