※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 10164번 문제인 격자상의 경로이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/10164
10164번: 격자상의 경로
입력의 첫째 줄에는 격자의 행의 수와 열의 수를 나타내는 두 정수 N과 M(1 ≤ N, M ≤ 15), 그리고 ○로 표시된 칸의 번호를 나타내는 정수 K(K=0 또는 1 < K < N×M)가 차례로 주어지며, 각 값은 공백으
www.acmicpc.net
격자 위에서 경로의 개수는 조합을 이용하여 간단히 계산 가능하다.
동그라미로 나타나는 칸의 행과 열을 사칙연산을 이용하여 계산해낼 수 있다면 문제를 쉽게 해결할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
int comb[32][32];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
for (int i = 0; i < 32; i++) {
comb[i][0] = comb[i][i] = 1;
}
for (int r = 2; r < 32; r++) {
for (int c = 1; c < r; c++) {
comb[r][c] = comb[r - 1][c - 1] + comb[r - 1][c];
}
}
int R, C, K; cin >> R >> C >> K;
if (K == 0) {
cout << comb[R + C - 2][C - 1];
}
else {
int r = (K - 1) / C + 1, c = (K - 1) % C + 1;
cout << comb[r + c - 2][c - 1] * comb[R - r + C - c][C - c];
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 10972 // C++] 다음 순열 (0) | 2021.07.29 |
---|---|
[BOJ 10973 // C++] 이전 순열 (0) | 2021.07.28 |
[BOJ 10651 // C++] Cow Jog (0) | 2021.07.26 |
[BOJ 14003 // C++] 가장 긴 증가하는 부분 수열 5 (0) | 2021.07.25 |
[BOJ 2568 // C++] 전깃줄 - 2 (0) | 2021.07.24 |