Engineering Note

[BOJ:11048]이동하기 본문

Problem Solving/BOJ

[BOJ:11048]이동하기

Software Engineer Kim 2021. 4. 29. 21:31

www.acmicpc.net/problem/11048

 

11048번: 이동하기

준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는

www.acmicpc.net

코드

#include <stdio.h>
int candy[1001][1001];
int map[1001][1001];
int n, m;
int Bigger(int a, int b) {
    if (a > b)return a;
    else return b;
}
void Sol() {
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m; ++j) {
            int result = Bigger(Bigger(candy[i - 1][j], candy[i][j - 1]), candy[i - 1][j - 1]);
            candy[i][j] = result + map[i][j];

        }
    }
    printf("%d\n", candy[n][m]);
}

int main() {
    freopen("input.txt", "rt", stdin);

    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m; ++j) {
            scanf("%d",&map[i][j]);
        }
    }
    Sol();

    return 0;
}

문제해결방법

  • 처음에 문제를 읽고 DFS로 완전탐색을 하였다. 완전탐색으로 풀 경우 시간초과가 발생한다
  • 각 경우의 최대 값을 구하는 방법은 (i,j)에 위치한 곳 까지의 최대 값은 (i-1,j), (i,j-1), (i-1,j-1)중에 최대값과 (i,j)의 사탕의 최대값을 합하면 (i,j)까지의 사탕의 최대값을 구할 수 있다.

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ:16234] 인구 이동  (0) 2021.05.22
[BOJ:2259번] 부등호  (0) 2021.05.13
[BOJ:1065] 한수  (0) 2021.05.08
[BOJ:1450] 냅색문제  (0) 2021.04.29
[BOJ:11047번] 동전 0  (0) 2021.04.06
Comments