※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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

+ Recent posts