Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
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
Archives
Today
Total
관리 메뉴

hwooo

BOJ (C/C++) 10164번: 격자상의 경로 본문

Study/Algorithm

BOJ (C/C++) 10164번: 격자상의 경로

hwooo 2022. 11. 8. 04:11

풀이

(0,0) ~ (15,15)까지의 배열을 구한 후, K 값에 따라 적절한 값을 찾아 서로 곱해주었다.

예제 입력 1

예제 1의 경우 노란색의 (0,0) ~ (1,2) , 초록색의 (1,2) ~ (2,4)까지의 배열 값을 곱해주면 K=8을 지나는 총 경로의 갯수이다.

이 때 초록색의 (1,2) ~ (2,4)는 (0,0) ~ (1,2) 즉, (0,0) ~ (N-k_x-1, M-k_y-1) 값과 같다.


코드

#include <stdio.h>
int main() {
	int N, M, K;
	int DP[16][16];
	int kx, ky, r1, r2;
	scanf("%d %d %d", &N, &M, &K);

	for (int i = 0; i < 16; i++) DP[0][i] = DP[i][0] = 1;
	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= M; j++) {
			DP[i][j] = DP[i - 1][j] + DP[i][j - 1];
		}
	}

	// K값에 따른 격자 상의 위치
	if (!K) kx = N - 1, ky = M - 1;
	else if (K%M == 0) kx = K / M - 1, ky = M - 1;
	else kx = K / M, ky = (K%M) - 1;

	printf("%d", DP[kx][ky] * DP[N - kx - 1][M - ky - 1]);
	return 0;
}

'Study > Algorithm' 카테고리의 다른 글

BOJ (C/C++) 1063번: 킹  (0) 2022.11.09
BOJ (C/C++) 1059번: 좋은 구간  (0) 2022.11.09
BOJ (C/C++) 1076번: 저항  (0) 2022.11.06
BOJ (C/C++) 1015번: 수열 정렬  (0) 2022.11.05
BOJ (C/C++) 1051번: 숫자 정사각형  (0) 2022.11.04