반응형

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

 

5549번: 행성 탐사

상근이는 우주선을 타고 인간이 거주할 수 있는 행성을 찾고 있다. 마침내, 전 세계 최초로 인간이 거주할 수 있는 행성을 찾았다. 이 행성은 정글, 바다, 얼음이 뒤얽힌 행성이다. 상근이는 이

www.acmicpc.net

 

J[i][j] = 왼쪽 위 좌표가 (1,1), 오른쪽 아래 좌표가 (i, j)인 직사각형에서 J의 개수를 저장해줍니다.

J[i][j] = J[i - 1][j] + J[i][j - 1] - J[i - 1][j - 1] + (map[i][j] == 'J' ? 1 : 0) 으로 계산될 수 있습니다.

입력 값이 (a, b, c, d)일 때, 그 범위 내에 있는 J의 개수는,

J[c][d] - J[a - 1][d] - J[c][b - 1] + J[a - 1][b - 1] 입니다.

 

#include <cstdio>

int m, n, k, a, b, c, d, joi[3][1001][1001] = { 0 };
char map[1001][1002] = { 0 };

int main() {
    scanf("%d %d %d", &m, &n, &k);
    for (int i = 1; i <= m; i++) {
        scanf("%s", &map[i][1]);
    }
    for (int i = 1; i <= m; i++) {
        for (int j = 1; j <= n; j++) {
            joi[0][i][j] = (map[i][j] == 'J') + joi[0][i - 1][j] + joi[0][i][j - 1] - joi[0][i - 1][j - 1];
            joi[1][i][j] = (map[i][j] == 'O') + joi[1][i - 1][j] + joi[1][i][j - 1] - joi[1][i - 1][j - 1];
            joi[2][i][j] = (map[i][j] == 'I') + joi[2][i - 1][j] + joi[2][i][j - 1] - joi[2][i - 1][j - 1];
        }
    }
    while (k--) {
        scanf("%d %d %d %d", &a, &b, &c, &d);
        for (int i = 0; i < 3; i++) {
            printf("%d ", joi[i][c][d] - joi[i][a - 1][d] - joi[i][c][b - 1] + joi[i][a - 1][b - 1]);
        }
        printf("\n");
    }
}
반응형

'Algorithm' 카테고리의 다른 글

백준 6198 : 옥상 정원 꾸미기  (0) 2021.11.17
백준 17940 : 지하철  (0) 2021.11.17
백준 1689 : 겹치는 선분  (0) 2021.11.17
백준 2352 : 반도체 설계  (0) 2021.11.17
백준 9470 : Strahler 순서  (0) 2021.11.17

+ Recent posts