• 문제 링크
15489번: 파스칼 삼각형
첫째 줄에 양의 정수 R, C, W가 공백을 한 칸씩 두고 차례로 주어진다. (단, 2 ≤ R+W ≤ 30, 2 ≤ C+W ≤ 30, 1 ≤ W ≤ 29, C ≤ R)
www.acmicpc.net
• 풀이 과정
위 꼭짓점이 r, c 이고 변의 길이가 w 인 정삼각형을 포함하는 범위까지 파스칼 삼각형을 구한다.
이는 2차원 배열에서 계단 형태를 띄며 각 좌표의 값은 좌상단 값과 상단 값을 합한 값이 된다.
이 후 문제에 주어진 정삼각형의 범위의 모든 값을 합한 값을 출력한다.
• 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int r = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
int w = Integer.parseInt(st.nextToken());
int[][] dp = new int[r + w + 1][r + w + 1];
dp[1][1] = 1;
for (int i = 2; i < dp.length; i++) {
for (int j = 1; j < i; j++)
dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];
}
int sum = 0;
for (int i = 0; i <= w; i++) {
for (int j = 0; j < i; j++)
sum += dp[r + i][c + j];
}
bw.write(String.valueOf(sum));
bw.flush();
}
}
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 15312 이름 궁합 - Dynamic Programming / Java (0) | 2023.03.30 |
---|---|
[백준] 4883 삼각 그래프 - Dynamic Programming / Java (0) | 2023.03.29 |
[백준] 14430 자원 캐기 - Dynamic Programming / Java (0) | 2023.03.27 |
[백준] 1793 타일링- Dynamic Programming / Java (0) | 2023.03.26 |
[백준] 18353 병사 배치하기 - Dynamic Programming / Java (0) | 2023.03.25 |
댓글