본문으로 바로가기

[백준 16507] 어두운 건 무서워

category PS/백준 문제풀이 2019. 8. 8. 10:41
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 

 

문제 : https://www.acmicpc.net/problem/16507

 

16507번: 어두운 건 무서워

첫 번째 줄에는 사진의 크기를 의미하는 정수 R, C (1 ≤ R, C ≤ 1,000)와 사진 일부분의 밝기 평균을 알아볼 개수를 의미하는 정수 Q (1 ≤ Q ≤ 10,000)가 주어진다. 다음 R개의 줄에 걸쳐 R×C 크기의 사진 정보가 주어지며, 사진의 각 픽셀에는 밝기를 의미하는 정수 K (1 ≤ K ≤ 1,000)가 주어진다. 다음 Q개의 각 줄에는 사진의 일부분을 나타내기 위한 두 꼭짓점을 의미하는 정수 r1, c1, r2, c2 (1 ≤ r1

www.acmicpc.net

 

2차원 배열 형태로의 부분 합 문제이다.

부분 합을 구할 때와 범위 합을 리턴할 때 계산을 주의하면 된다.

또한 평균을 구하는 것이니 부분 합을 칸의 개수로 나눠주면 된다.

 

#include <iostream>
using namespace std;

int r, c, q;
int table[1001][1001];
int psum[1001][1001];

void partialSum(){
    for(int i = 1; i <= r; i++)
        for(int j = 1; j <= c; j++)
            psum[i][j] = psum[i-1][j] + psum[i][j-1] - psum[i-1][j-1] + table[i][j];
}

int getAvg(int r1, int c1, int r2, int c2){
    int summ = psum[r2][c2] - psum[r1-1][c2] - psum[r2][c1-1] + psum[r1-1][c1-1];
    int cnt = (r2-r1+1) * (c2-c1+1);
    return summ / cnt;
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    cin >> r >> c >> q;
    
    for(int i = 1; i <= r; i++)
        for(int j = 1; j <= c; j++)
            cin >> table[i][j];
    
    partialSum();
    
    for(int i = 0 ; i < q; i++){
        int r1, c1, r2, c2;
        cin >> r1 >> c1 >> r2 >> c2;
        cout << getAvg(r1, c1, r2, c2) << '\n';
    }
    
    return 0;
}

 

 

 

'PS > 백준 문제풀이' 카테고리의 다른 글

[백준 1068] 트리  (0) 2019.08.17
[백준 5397] 키로거  (0) 2019.08.09
[백준 10986] 나머지 합  (0) 2019.08.08
[백준 16139] 인간-컴퓨터 상호작용  (0) 2019.08.07
[백준 17203] ∑|ΔEasyMAX|  (0) 2019.08.07