πŸ•οΈ ICPC Sinchon/Prefix Sum

[C++][BOJ] λ°±μ€€ 2167번: 2차원 λ°°μ—΄μ˜ ν•©

선달 2024. 8. 8. 17:50
λ°˜μ‘ν˜•

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

 

문제

2차원 배열이 μ£Όμ–΄μ‘Œμ„ λ•Œ (i, j) μœ„μΉ˜λΆ€ν„° (x, y) μœ„μΉ˜κΉŒμ§€μ— μ €μž₯λ˜μ–΄ μžˆλŠ” μˆ˜λ“€μ˜ 합을 κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. λ°°μ—΄μ˜ (i, j) μœ„μΉ˜λŠ” iν–‰ j열을 λ‚˜νƒ€λ‚Έλ‹€.

 

μž…λ ₯

첫째 쀄에 λ°°μ—΄μ˜ 크기 N, M(1 ≤ N, M ≤ 300)이 주어진닀. λ‹€μŒ N개의 μ€„μ—λŠ” M개의 μ •μˆ˜λ‘œ 배열이 주어진닀. 배열에 ν¬ν•¨λ˜μ–΄ μžˆλŠ” μˆ˜λŠ” μ ˆλŒ“κ°’μ΄ 10,000보닀 μž‘κ±°λ‚˜ 같은 μ •μˆ˜μ΄λ‹€. κ·Έ λ‹€μŒ μ€„μ—λŠ” 합을 ꡬ할 λΆ€λΆ„μ˜ 개수 K(1 ≤ K ≤ 10,000)κ°€ 주어진닀. λ‹€μŒ K개의 μ€„μ—λŠ” λ„€ 개의 μ •μˆ˜λ‘œ i, j, x, yκ°€ 주어진닀(1 ≤ i ≤ x ≤ N, 1 ≤ j ≤ y ≤ M).

좜λ ₯

K개의 쀄에 μˆœμ„œλŒ€λ‘œ λ°°μ—΄μ˜ 합을 좜λ ₯ν•œλ‹€. λ°°μ—΄μ˜ 합은 231-1보닀 μž‘κ±°λ‚˜ κ°™λ‹€.

 

풀이

// 풀이 : https://whkakrkr.tistory.com

#include <iostream>
#include <vector>

using namespace std;

int main() {
    int n, m;
    cin >> n >> m;
    vector<vector<int>> input(n+1, vector<int>(m+1));
    for(int i=1; i<=n; i++) {
        for(int j=1; j<=m; j++) {
            cin >> input[i][j];
        }
    }
    
    // λˆ„μ ν•© κ΅¬ν•˜κΈ°
    vector<vector<int>> sum(n+1, vector<int>(m+1));
    for(int i=1; i<=n; i++) {
        for(int j=1; j<=m; j++) {
            sum[i][j] = sum[i-1][j] + sum[i][j-1] - sum[i-1][j-1] + input[i][j];
        }
    }

    int k, i,j,x,y;
    cin >> k;
    while(k--) {
        cin >> i >> j >> x >> y;
        cout << sum[x][y] - sum[i-1][y] - sum[x][j-1] + sum[i-1][j-1] << "\n";
    }
    
    return 0;
}
λ°˜μ‘ν˜•