Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 백준
- dynamic programming
- DP
- 해시
- Spring
- 해시맵
- 그리디
- Algorithm
- 너비우선탐색
- DFS
- HashMap
- 스프링
- 브루트포스
- switch
- 구현
- BFS
- broadcast
- programmers
- Network
- 백트래킹
- 동적계획법
- boj
- 이분탐색
- 네트워크
- greedy
- Backtracking
- 깊이우선탐색
- DynamicProgramming
- 프로그래머스
- 알고리즘
Archives
- Today
- Total
옌의 로그
[Algorithm] 백준 - 파스칼 삼각형 (15489번) 본문
문제
사용 알고리즘
- 동적계획법 (Dynamic Programming)
해결방법
- 파스칼의 삼각형은, x == 0 일땐 무조건 1을 가진다
- dp[y][x] = dp[y-1][x-1] + dp[y-1][x]
- 대칭구조 이므로, 절반만 dp를 채우고, 내부 합을 구할 때 dp 값이 없는 경우, 대칭위치의 값을 사용해 연산한다
- dp[3][0], dp[3][1]
- dp[4][0], dp[4][1]
- dp[5][0], dp[5][1], dp[5][2]
- dp[6][0], dp[6][1], dp[6][2]
....
소스코드
사용언어 : c++
#include <iostream>
using namespace std;
int dp[31][31];
int main()
{
int R, C, W;
cin >> R >> C >> W;
for (int i = 1; i < 31; i++) {
dp[i][0] = 1;
}
for (int i = 3; i < 31; i++) {
for (int j = 1; j <= i / 2; j++) {
if (j == i/2 && i%2 == 0) continue;
dp[i][j] = (dp[i-1][j] ?: dp[i-1][j-1]) + dp[i-1][j-1];
}
}
int res = 0;
for (int i = 1; i <= W; i++) {
for (int j = 0; j < i; j++) {
int num = dp[R+i-1][C+j-1] ?: dp[R+i-1][(R+i-1) - (C+j-1) - 1];
res += num;
}
}
cout << res;
return 0;
}
x ?: y
* c++17 부터 간단한 대안 연산자가 도입되어 3항 연산자를 더 간단히 사용할 수 있다
한줄평
메모리 초과를 우려해 dp를 반만 채웠는데, 굳이 그렇게 안해도 됐었다. ㅎㅎ
'스터디 > 알고리즘' 카테고리의 다른 글
[Algorithm] 백준 - 문자열 잘라내기 (2866번) (1) | 2024.02.11 |
---|---|
[Algorithm] 백준 - 트리의 기둥과 가지 (20924번) (0) | 2024.01.18 |
[Algorithm] 백준 - 감소하는 수 (1038번) (0) | 2023.10.26 |
[Algorithm] 백준 - 행복 유치원 (13164번) (1) | 2023.10.17 |
[Algorithm] 백준 - 효율적인 해킹 (1325번) (1) | 2023.08.31 |
Comments