눈송이의 개발생활

[BOJ]11048 - 이동하기 (C++) 본문

Algorithm/BOJ

[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