눈송이의 개발생활
[BOJ]11048 - 이동하기 (C++) 본문
문제
https://www.acmicpc.net/problem/11048
코드
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int dp[1001][1001];
int arr[1001][1001];
int main(){
cin.tie(0); cout.tie(0);
ios_base::sync_with_stdio(false);
int n, m;
cin >> n >> m;
for(int i=1; i<=n;i++){
for(int j=1; j<=m; j++){
cin >> arr[i][j];
}
}
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
int rUp, cUp, rcUp;
cUp = dp[i-1][j];
rUp = dp[i][j-1];
rcUp = dp[i-1][j-1];
dp[i][j] = arr[i][j] + max({cUp, rUp, rcUp});
}
}
cout << dp[n][m];
}
풀이
준규는 (r+1, c), (r, c+1), (r+1, c+1) 중 최대로 이동해야 한다.
이 전에 계산 했던 결과를 dp[]에 담고 위의 3개의 좌표 중 최댓값으로 이동해서 dp의 값을 바꾼다.
for문이 i=1~n인 이유는 준규가 (1,1)에서 시작하기 때문이다.
아이디어를 생각해 내면 꽤 쉽게 풀 수 있는 문제였다.
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ]11047 - 동전 0 (C++) (0) | 2022.01.05 |
---|---|
[BOJ]11568 - 민균이의 계략 (C++) (0) | 2022.01.05 |
[BOJ]11762 - 2×n 타일링 (C++) (0) | 2022.01.05 |
[BOJ]9095 - 1,2,3 더하기 (C++) (0) | 2022.01.05 |
[BOJ]2346 - 풍선 터뜨리기 (C++) (0) | 2022.01.05 |
Comments