STUDY/Algorithm

[백준] 1890 점프 C/C++

sinawi95 2022. 2. 20. 11:47
728x90

https://www.acmicpc.net/problem/1890

 

1890번: 점프

첫째 줄에 게임 판의 크기 N (4 ≤ N ≤ 100)이 주어진다. 그 다음 N개 줄에는 각 칸에 적혀져 있는 수가 N개씩 주어진다. 칸에 적혀있는 수는 0보다 크거나 같고, 9보다 작거나 같은 정수이며, 가장

www.acmicpc.net

DP로 풀면 되는데 자료형을 주의해야한다.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int arr[100][100];
long long dp[100][100] = { 0, };

int main() {
	int n, i, j, tmp;
	scanf("%d", &n);
	int* arr = (int*)malloc(sizeof(int) * n * n);
	long long* dp = (long long*)malloc(sizeof(long long) * n * n);
	memset(dp, 0, sizeof(long long) * n * n);

	for (i = 0; i < n; i++)
		for (j = 0; j < n; j++)
			scanf("%d", &arr[i * n + j]);

	dp[0] = 1;
	for (i = 0; i < n; i++) {
		for (j = 0; j < n; j++) {
			
			if (dp[n * i + j] && arr[n * i + j]) {
				tmp = j + arr[i*n+j];
				if (tmp < n)
					dp[i * n + tmp] += dp[i * n + j];
				tmp = i + arr[i * n + j];
				if (tmp < n)
					dp[tmp * n + j] += dp[i * n + j];
			}
		}
	}
	printf("%lld\n", dp[(n - 1) * n + n - 1]);
	free(arr);
	free(dp);
	return 0;
}

쉬운 문제이지만 포인터에 익숙해지기위해 배열을 동적할당해서 풀어보았다.

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

[백준] 1197 최소 스패닝 트리 python  (0) 2022.02.22
[백준] 11655 ROT13 C,C++  (0) 2022.02.21
[백준] 21317 징검다리 건너기 C++  (0) 2022.02.19
[백준] 9019 DSLR C++  (0) 2022.02.18
[백준] 1717 집합의 표현 python  (0) 2022.02.17