※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 24418번 문제인 알고리즘 수업 - 행렬 경로 문제 1이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/24418
24418번: 알고리즘 수업 - 행렬 경로 문제 1
오늘도 서준이는 동적 프로그래밍 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자. 양의 정수로 이루어진 n × n 행렬 m이 주어진다. 행렬의
www.acmicpc.net
코드1이 실행되는 횟수는 (n,n)에서 각각의 (1,i) 까지 도달하는 경로들의 개수의 합과 각각의 (j,1)까지 도달하는 경로들의 개수의 합과 같다. (단, i와 j는 n 이하의 양의 정수)
위의 합은 공식을 이용하여 더욱 단순히 할 수 있으니 생각해보자.
N이 충분히 작을 때의 조합의 값은 파스칼의 삼각형을 구현하는 것으로도 문제를 해결할 수 있을 정도로 빠르게(O(N^2)) 계산해낼 수 있다.
코드2가 실행되는 횟수는 주어지는 행렬의 칸수와 같으므로 N^2이다.
문제의 모든 입력을 읽지 않아도 올바른 답만을 출력하면 맞았습니다를 받을 수 있으니, N만 읽고 문제를 해결하자.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
int comb[31][31];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
for (int i = 0; i < 31; i++) comb[i][0] = comb[i][i] = 1;
for (int i = 2; i < 31; i++) {
for (int j = 1; j < i; j++) comb[i][j] = comb[i - 1][j - 1] + comb[i - 1][j];
}
int N; cin >> N;
cout << 2 * comb[2 * N - 1][N] << ' ' << N * N;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 24884 // C++] 장작 넣기 (0) | 2022.04.12 |
---|---|
[BOJ 24891 // C++] 단어 마방진 (0) | 2022.04.11 |
[BOJ 24430 // C++] 알고리즘 수업 - 행렬 경로 문제 7 (0) | 2022.04.10 |
[BOJ 24427 // C++] 알고리즘 수업 - 행렬 경로 문제 4 (0) | 2022.04.10 |
[BOJ 24860 // C++] Counting Antibodies (0) | 2022.04.10 |