[๊ธฐ๋ณธ] ๊ตฌ๊ฐ„ํ•ฉ ์‘์šฉ

2025. 3. 13. 01:17ยท์•Œ๊ณ ๋ฆฌ์ฆ˜

 

๋“ค์–ด๊ฐ€๋ฉฐ

๊ตฌ๊ฐ„ํ•ฉ์˜ ์ค‘์š”์„ฑ์„ ๋” ์•Œ์•„๋ณด๊ณ ์ž ๊ตฌ๊ฐ„ํ•ฉ๊ณผ ๊ด€๋ จ๋œ ์‘์šฉ๋ฌธ์ œ๋ฅผ ๋” ํ’€์–ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์ง€๋‚œ ๊ตฌ๊ฐ„ํ•ฉ๋ณด๋‹ค๋Š” ์กฐ๊ธˆ ๋” ์–ด๋ ค์šด ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ตฌ๊ฐ„ํ•ฉ์„ ๊ตฌํ•ด๋†“๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๋‚ฎ์ถฐ์ฃผ๋Š” ์ง€ ์ฒดํฌํ•ด๋ณด๋Š” ์‹œ๊ฐ„์ด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

 

๋ฌธ์ œ

๋ฐฑ์ค€ 11660: ๊ตฌ๊ฐ„ํ•ฉ ๊ตฌํ•˜๊ธฐ 5(๋งํฌ)

 

 

ํ’€์ด1

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    int size, count;
    cin >> size >> count;

    vector<vector<int>> sumMetrix(size + 1);
    for (int i = 1; i <= size; i++)
    {
        vector<int> numList(size + 1);
        for (int j = 1; j <= size; j++)
        {
            int num;
            cin >> num;
            numList[j] = numList[j-1] + num;
        }

        sumMetrix[i] = numList;
    }

    for (int i = 0; i < count; i++)
    {
        int x1, y1, x2, y2;
        cin >> x1 >> y1 >> x2 >> y2;

        int sum = 0;
        for (int j = x1; j <= x2; j++)
            sum += (sumMetrix[j][y2] - sumMetrix[j][y1-1]);

        printf("%d\n", sum);
    }
}

1์ฐจ์› ํ˜•ํƒœ์˜ ๊ฐ€๋กœ(ํ–‰) ๊ตฌ๊ฐ„์˜ ํ•ฉ์„ ๋ชจ๋‘ ๋จผ์ € ๊ตฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์„ธ๋กœ ์˜์—ญ ๊ตฌ๊ฐ„์˜ ์ฐจ์ด๋งŒํผ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ€๋กœ ์˜์—ญ(1์ฐจ์›)์˜ ๊ตฌ๊ฐ„ํ•ฉ์„ ๋”ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์ •๋‹ต์€ ๋งž์•˜์œผ๋‚˜ ์‹œ๊ฐ„์ด 248ms ์ •๋„ ๋‚˜์™”์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„์„ ๋” ์ค„์ผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์„œ ํ’€์ด2(๋” ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•)์œผ๋กœ ํ•œ๋ฒˆ ๋” ํ’€์–ด๋ดค์Šต๋‹ˆ๋‹ค. 

 

 

ํ’€์ด2

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    int size, count;
    cin >> size >> count;

    vector<vector<int>> A(size + 1);
    for (int i = 1; i <= size; i++)
    {
        vector<int> numList(size + 1);
        for (int j = 1; j <= size; j++)
            cin >> numList[j];

        A[i] = numList;
    }

    vector<vector<int>> D(size + 1, vector<int>(size + 1));
    for (int i = 1; i <= size; i++)
    {
        for (int j = 1; j <= size; j++)
            D[i][j] = D[i][j-1] + D[i-1][j] - D[i-1][j-1] + A[i][j];
    }

    for (int i = 0; i < count; i++)
    {
        int x1, y1, x2, y2;
        cin >> x1 >> y1 >> x2 >> y2;
        printf("%d\n", D[x2][y2] - D[x1-1][y2] - D[x2][y1-1] + D[x1-1][y1-1]);
    }
}

์ด ํ’€์ด์—์„œ๋Š” ์›๋ณธ ๋ฐฐ์—ด์„ ๊ทธ๋Œ€๋กœ ์ž…๋ ฅ๋ฐ›์•„ ์ €์žฅํ•˜๊ณ , 2์ฐจ์›์˜ ๊ตฌ๊ฐ„ํ•ฉ์„ ๊ตฌํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๊ฐ„ํ•ฉ ๋ฐฐ์—ด D์˜ i, j ๊ฐ’์„ ๊ตฌํ•˜๋Š” ๊ณต์‹์€ D[i][j] = D[i][j-1] + D[i-1][j] - D[i-1][j-1] + A[i][j]; ์ž…๋‹ˆ๋‹ค. ๋‚˜๋ฆ„์˜ ๊ณต์‹๊ฐ™์ง€๋งŒ, ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋ฐ”๋กœ ์œ„, ์™ผ์ชฝ, ํ•ด๋‹น ๊ฐ’(A[i][j]) ์„ ๋ชจ๋‘ ๋”ํ•˜๊ณ  ์ค‘๋ณต์œผ๋กœ ๋”ํ•ด์ง„ ์œ„+์™ผ์ชฝ ๊ฐ’์„ ๋นผ์ฃผ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  (x1, y1), (x2, y2) ์˜์—ญ์˜ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ D[x2][y2] - D[x1-1][y2] - D[x2][y1-1] + D[x1-1][y1-1]์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 1,1์—์„œ ํ•ด๋‹น ๊ตฌ๊ฐ„์„ ์ œ์™ธํ•œ ์œ„์ชฝ, ์™ผ์ชฝ์„ ์ œ์™ธ(๋นผ๊ธฐ)ํ•˜๊ณ  ์ค‘๋ณต์œผ๋กœ ๋นผ์ค€ ์œ„+์™ผ์ชฝ ๊ฐ’์„ ๋”ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ’€๋ฉด 120ms๋กœ ์‹œ๊ฐ„์ด ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์—ˆ์Šต๋‹ˆ๋‹ค. ์•„๋ฌด๋ž˜๋„ ํ’€์ด1์˜ ๊ฐ€๋กœ์˜์—ญ ๊ตฌ๊ฐ„ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋ฐ˜๋ณต๋ฌธ์ด ํ•œ๋ฒˆ ๋” ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋งŒํผ ๋” ์˜ค๋ž˜๊ฑธ๋ฆฌ๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค. ํ’€์ด2์˜ ๋ฐฉ๋ฒ•์ด ๋”์šฑ ์ •์„์ด๋ฉฐ ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์ด๋ผ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'์•Œ๊ณ ๋ฆฌ์ฆ˜' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์šฐ์„ ์ˆœ์œ„ ํ] ์ตœ์†Ÿ๊ฐ’ or ์ตœ๋Œ“๊ฐ’ ์ฐพ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜(feat. deque)  (0) 2025.04.13
[๊ธฐ๋ณธ] ํˆฌ ํฌ์ธํ„ฐ  (0) 2025.03.25
[๊ธฐ๋ณธ] ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ ํ™œ์šฉ  (0) 2025.03.10
[๊ธฐ๋ณธ] ํ•ฉ๋ฐฐ์—ด๊ณผ ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ  (0) 2025.03.08
[๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰] ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(Depth First Search, DFS)  (0) 2025.02.12
'์•Œ๊ณ ๋ฆฌ์ฆ˜' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [์šฐ์„ ์ˆœ์œ„ ํ] ์ตœ์†Ÿ๊ฐ’ or ์ตœ๋Œ“๊ฐ’ ์ฐพ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜(feat. deque)
  • [๊ธฐ๋ณธ] ํˆฌ ํฌ์ธํ„ฐ
  • [๊ธฐ๋ณธ] ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ ํ™œ์šฉ
  • [๊ธฐ๋ณธ] ํ•ฉ๋ฐฐ์—ด๊ณผ ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ
์„œ์•„๋ž‘๐Ÿ˜ƒ
์„œ์•„๋ž‘๐Ÿ˜ƒ
Just Do It๐Ÿ’ช
  • ์„œ์•„๋ž‘๐Ÿ˜ƒ
    G-Stack
    ์„œ์•„๋ž‘๐Ÿ˜ƒ
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด๋ณด๊ธฐ (144)
      • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (78)
        • C++ ๊ธฐ์ดˆ (28)
        • C++ ์‘์šฉ (18)
        • Python (18)
        • JavaScript & NodeJS (0)
        • Go (12)
        • React & NextJS (2)
        • Java (0)
      • AI (2)
      • ์ปดํ“จํ„ฐ ๊ตฌ์กฐ & ์šด์˜์ฒด์ œ (31)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (12)
      • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (5)
      • ๋„คํŠธ์›Œํฌ (3)
      • ๋””์ž์ธํŒจํ„ด (5)
      • ์„œ๋น„์Šค & ํˆด (7)
      • ํŠธ๋ Œ๋“œ&์ด์Šˆ (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

    • G์Šคํƒ์˜ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ
    ํŒŒ์ด์ฌ
    ์กฐ๊ฑด๋ฌธ
    c
    STD
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    pointer
    ๋ฉ”๋ชจ๋ฆฌ
    ์ƒ์†
    ๋ฐฐ์—ด
    fork
    c++
    ์žฌ๊ท€
    ํฌ์ธํ„ฐ
    ์Šคํƒ
    ๋””์ž์ธํŒจํ„ด
    Thread
    init
    cpu
    ํŒจํ‚ค์ง€
    ๋ณ€์ˆ˜
    ๋ฐ˜๋ณต๋ฌธ
    ํŒŒ์ผ์ž…์ถœ๋ ฅ
    ์ปดํ“จํ„ฐ
    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
    ํ•จ์ˆ˜
    go
    ํ•˜๋“œ๋””์Šคํฌ
    RAM
    component
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.6
์„œ์•„๋ž‘๐Ÿ˜ƒ
[๊ธฐ๋ณธ] ๊ตฌ๊ฐ„ํ•ฉ ์‘์šฉ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”