ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๊ณต๋ถ€/C++

๋ฐฑ์ค€ 17779๋ฒˆ : ๊ฒŒ๋ฆฌ๋ฉ˜๋”๋ง2 with C++

์—ฐ์ด14 2023. 4. 16. 00:54

๋ฌธ์ œ

์žฌํ˜„์‹œ์˜ ์‹œ์žฅ ๊ตฌ์žฌํ˜„์€ ์ง€๋‚œ ๋ช‡ ๋…„๊ฐ„ ๊ฒŒ๋ฆฌ๋งจ๋”๋ง์„ ํ†ตํ•ด์„œ ์ž์‹ ์˜ ๋‹น์—๊ฒŒ ์œ ๋ฆฌํ•˜๊ฒŒ ์„ ๊ฑฐ๊ตฌ๋ฅผ ํš์ •ํ–ˆ๋‹ค. ๊ฒฌ์ œํ•  ๊ถŒ๋ ฅ์ด ์—†์–ด์ง„ ๊ตฌ์žฌํ˜„์€ ๊ถŒ๋ ฅ์„ ๋งค์šฐ ๋ถ€๋‹นํ•˜๊ฒŒ ํ–‰์‚ฌํ–ˆ๊ณ , ์‹ฌ์ง€์–ด๋Š” ์‹œ์˜ ์ด๋ฆ„๋„ ์žฌํ˜„์‹œ๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค. ์ด๋ฒˆ ์„ ๊ฑฐ์—์„œ๋Š” ์ตœ๋Œ€ํ•œ ๊ณตํ‰ํ•˜๊ฒŒ ์„ ๊ฑฐ๊ตฌ๋ฅผ ํš์ •ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

์žฌํ˜„์‹œ๋Š” ํฌ๊ธฐ๊ฐ€ N×N์ธ ๊ฒฉ์ž๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๊ฒฉ์ž์˜ ๊ฐ ์นธ์€ ๊ตฌ์—ญ์„ ์˜๋ฏธํ•˜๊ณ , rํ–‰ c์—ด์— ์žˆ๋Š” ๊ตฌ์—ญ์€ (r, c)๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๊ตฌ์—ญ์„ ๋‹ค์„ฏ ๊ฐœ์˜ ์„ ๊ฑฐ๊ตฌ๋กœ ๋‚˜๋ˆ ์•ผ ํ•˜๊ณ , ๊ฐ ๊ตฌ์—ญ์€ ๋‹ค์„ฏ ์„ ๊ฑฐ๊ตฌ ์ค‘ ํ•˜๋‚˜์— ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค. ์„ ๊ฑฐ๊ตฌ๋Š” ๊ตฌ์—ญ์„ ์ ์–ด๋„ ํ•˜๋‚˜ ํฌํ•จํ•ด์•ผ ํ•˜๊ณ , ํ•œ ์„ ๊ฑฐ๊ตฌ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ตฌ์—ญ์€ ๋ชจ๋‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ตฌ์—ญ A์—์„œ ์ธ์ ‘ํ•œ ๊ตฌ์—ญ์„ ํ†ตํ•ด์„œ ๊ตฌ์—ญ B๋กœ ๊ฐˆ ์ˆ˜ ์žˆ์„ ๋•Œ, ๋‘ ๊ตฌ์—ญ์€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ์ค‘๊ฐ„์— ํ†ตํ•˜๋Š” ์ธ์ ‘ํ•œ ๊ตฌ์—ญ์€ 0๊ฐœ ์ด์ƒ์ด์–ด์•ผ ํ•˜๊ณ , ๋ชจ๋‘ ๊ฐ™์€ ์„ ๊ฑฐ๊ตฌ์— ํฌํ•จ๋œ ๊ตฌ์—ญ์ด์–ด์•ผ ํ•œ๋‹ค.

์„ ๊ฑฐ๊ตฌ๋ฅผ ๋‚˜๋ˆ„๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ๊ธฐ์ค€์  (x, y)์™€ ๊ฒฝ๊ณ„์˜ ๊ธธ์ด d1, d2๋ฅผ ์ •ํ•œ๋‹ค. (d1, d2 ≥ 1, 1 ≤ x < x+d1+d2 ≤ N, 1 ≤ y-d1 < y < y+d2 ≤ N)
  2. ๋‹ค์Œ ์นธ์€ ๊ฒฝ๊ณ„์„ ์ด๋‹ค.
    1. (x, y), (x+1, y-1), ..., (x+d1, y-d1)
    2. (x, y), (x+1, y+1), ..., (x+d2, y+d2)
    3. (x+d1, y-d1), (x+d1+1, y-d1+1), ... (x+d1+d2, y-d1+d2)
    4. (x+d2, y+d2), (x+d2+1, y+d2-1), ..., (x+d2+d1, y+d2-d1)
  3. ๊ฒฝ๊ณ„์„ ๊ณผ ๊ฒฝ๊ณ„์„ ์˜ ์•ˆ์— ํฌํ•จ๋˜์–ด์žˆ๋Š” ๊ณณ์€ 5๋ฒˆ ์„ ๊ฑฐ๊ตฌ์ด๋‹ค.
  4. 5๋ฒˆ ์„ ๊ฑฐ๊ตฌ์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๊ตฌ์—ญ (r, c)์˜ ์„ ๊ฑฐ๊ตฌ ๋ฒˆํ˜ธ๋Š” ๋‹ค์Œ ๊ธฐ์ค€์„ ๋”ฐ๋ฅธ๋‹ค.
    • 1๋ฒˆ ์„ ๊ฑฐ๊ตฌ: 1 ≤ r < x+d1, 1 ≤ c ≤ y
    • 2๋ฒˆ ์„ ๊ฑฐ๊ตฌ: 1 ≤ r ≤ x+d2, y < c ≤ N
    • 3๋ฒˆ ์„ ๊ฑฐ๊ตฌ: x+d1 ≤ r ≤ N, 1 ≤ c < y-d1+d2
    • 4๋ฒˆ ์„ ๊ฑฐ๊ตฌ: x+d2 < r ≤ N, y-d1+d2 ≤ c ≤ N

์•„๋ž˜๋Š” ํฌ๊ธฐ๊ฐ€ 7×7์ธ ์žฌํ˜„์‹œ๋ฅผ ๋‹ค์„ฏ ๊ฐœ์˜ ์„ ๊ฑฐ๊ตฌ๋กœ ๋‚˜๋ˆˆ ๋ฐฉ๋ฒ•์˜ ์˜ˆ์‹œ์ด๋‹ค.

     
x = 2, y = 4, d1 = 2, d2 = 2 x = 2, y = 5, d1 = 3, d2 = 2 x = 4, y = 3, d1 = 1, d2 = 1

๊ตฌ์—ญ (r, c)์˜ ์ธ๊ตฌ๋Š” A[r][c]์ด๊ณ , ์„ ๊ฑฐ๊ตฌ์˜ ์ธ๊ตฌ๋Š” ์„ ๊ฑฐ๊ตฌ์— ํฌํ•จ๋œ ๊ตฌ์—ญ์˜ ์ธ๊ตฌ๋ฅผ ๋ชจ๋‘ ํ•ฉํ•œ ๊ฐ’์ด๋‹ค. ์„ ๊ฑฐ๊ตฌ๋ฅผ ๋‚˜๋ˆ„๋Š” ๋ฐฉ๋ฒ• ์ค‘์—์„œ, ์ธ๊ตฌ๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ์„ ๊ฑฐ๊ตฌ์™€ ๊ฐ€์žฅ ์ ์€ ์„ ๊ฑฐ๊ตฌ์˜ ์ธ๊ตฌ ์ฐจ์ด์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•ด๋ณด์ž.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์žฌํ˜„์‹œ์˜ ํฌ๊ธฐ N์ด ์ฃผ์–ด์ง„๋‹ค.

๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— N๊ฐœ์˜ ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. rํ–‰ c์—ด์˜ ์ •์ˆ˜๋Š” A[r][c]๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ธ๊ตฌ๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ์„ ๊ฑฐ๊ตฌ์™€ ๊ฐ€์žฅ ์ ์€ ์„ ๊ฑฐ๊ตฌ์˜ ์ธ๊ตฌ ์ฐจ์ด์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

์ œํ•œ

  • 5 ≤ N ≤ 20
  • 1 ≤ A[r][c] ≤ 100

๊ตฌํ˜„ ๋ฐฉ๋ฒ•

๊ฒฝ๊ณ„๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜์—์„œ ๊ฐ ์„ ๊ฑฐ๊ตฌ๋ณ„ ์ธ๊ตฌ์ˆ˜๋ฅผ ๊ตฌํ•œ ๋’ค, ์ตœ๋Œ€ ์ธ๊ตฌ ์ˆ˜์™€ ์ตœ์†Œ ์ธ๊ตฌ ์ˆ˜์˜ ์ฐจ์ด๋ฅผ ๊ตฌํ•˜์—ฌ ๊ทธ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜์˜€๋‹ค.

** 5๋ฒˆ ์„ ๊ฑฐ๊ตฌ์˜ ์ธ๊ตฌ ์ˆ˜๋ฅผ ๊ฐ€์žฅ ๋จผ์ € ๊ตฌํ•œ ๋’ค 5๋ฒˆ ์„ ๊ฑฐ๊ตฌ์˜ ์ธ๊ตฌ๋ฅผ ๋ชจ๋‘ 0์œผ๋กœ ์„ค์ •ํ•˜์—ฌ 1~4๋ฒˆ ์„ ๊ฑฐ๊ตฌ์˜ ์ธ๊ตฌ ์ˆ˜๋ฅผ ์‚ฌ๊ฐํ˜• ํ˜•ํƒœ๋กœ ์‰ฝ๊ฒŒ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€๋‹ค.

๊ตฌํ˜„ ์‹œ๊ฐ„

4ms

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

int A[21][21];  // ๊ฐ ๊ตฌ์—ญ๋ณ„ ์ธ๊ตฌ ์ˆ˜

int people_gap(int r, int c, int d1, int d2, int N) {
    int map[21][21];    // ๊ฐ ๊ตฌ์—ญ๋ณ„ ์ธ๊ตฌ ์ˆ˜ ๋ณต์ œ
    std::copy(&A[0][0], &A[0][0] + 21 * 21, &map[0][0]);

    int people[5] = { 0, }; // ๊ฐ ์„ ๊ฑฐ๊ตฌ์˜ ์ด ์ธ๊ตฌ ์ˆ˜

    // 5๋ฒˆ ์„ ๊ฑฐ๊ตฌ ์ธ๊ตฌ ์ˆ˜ ๊ตฌํ•œ ๋’ค ๊ฐ ๊ตฌ์—ญ ์ธ๊ตฌ๋ฅผ 0์œผ๋กœ ์„ค์ •
    for (int d = 0; d <= d2; d++) {
        for (int dd = 0; dd <= d1; dd++) {
            people[4] += map[r + d - dd][c + d + dd];
            map[r + d - dd][c + d + dd] = 0;
        }
    }
    for (int d = 0; d < d2; d++) {
        for (int dd = 0; dd < d1; dd++) {
            people[4] += map[r + d - dd][c + 1 + d + dd];
            map[r + d - dd][c + 1 + d + dd] = 0;
        }
    }

    // 1๋ฒˆ ์„ ๊ฑฐ๊ตฌ ์ธ๊ตฌ ์ˆ˜ ๊ตฌํ•˜๊ธฐ
    for (int i = 0; i < r; i++) {
        for (int j = 0; j <= c + d1; j++) {
            people[0] += map[i][j];
        }
    }
    // 2๋ฒˆ ์„ ๊ฑฐ๊ตฌ ์ธ๊ตฌ ์ˆ˜ ๊ตฌํ•˜๊ธฐ
    for (int i = 0; i <= r - d1 + d2; i++) {
        for (int j = c + d1 + 1; j < N; j++) {
            people[1] += map[i][j];
        }
    }
    // 3๋ฒˆ ์„ ๊ฑฐ๊ตฌ ์ธ๊ตฌ ์ˆ˜ ๊ตฌํ•˜๊ธฐ
    for (int i = r; i < N; i++) {
        for (int j = 0; j < c + d2; j++) {
            people[2] += map[i][j];
        }
    }
    // 4๋ฒˆ ์„ ๊ฑฐ๊ตฌ ์ธ๊ตฌ ์ˆ˜ ๊ตฌํ•˜๊ธฐ
    for (int i = r - d1 + d2 + 1; i < N; i++) {
        for (int j = c + d2; j < N; j++) {
            people[3] += map[i][j];
        }
    }

    sort(people, people + 5);   // ๊ฐ ์„ ๊ฑฐ๊ตฌ ์ธ๊ตฌ ์ˆ˜ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ

    return (people[4] - people[0]); // ์ตœ๋Œ€ ์ธ๊ตฌ ์ˆ˜ - ์ตœ์†Œ ์ธ๊ตฌ ์ˆ˜
}


int main() {
    int N;
    int min = 10000;

    cin >> N;

    // ๊ฐ ๊ตฌ์—ญ๋ณ„ ์ธ๊ตฌ ์ˆ˜ ์ž…๋ ฅ
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            cin >> A[i][j];
        }
    }

    for (int r = 0; r < N; r++) {
        for (int c = 0; c < N; c++) {
            for (int d1 = 1; d1 < N; d1++) {
                for (int d2 = 1; d2 < N; d2++) {
                    if (c + d1 + d2 >= N || r - d1 < 0 || r + d2 >= N)
                    {   // ๊ฒฝ๊ณ„๊ฐ€ ๊ทธ๋ ค์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
                        break;
                    }
                    int gap = people_gap(r, c, d1, d2, N);
                    if (gap < min) {    // ์ธ๊ตฌ ์ฐจ์ด์˜ ์ตœ์†Ÿ๊ฐ’ ๊ตฌํ•˜๊ธฐ
                        min = gap;
                    }
                }
            }
        }
    }

    cout << min;

    return 0;
}