๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”ฅ PS(Problem Solving) ๐Ÿ”ฅ/BOJ

[BOJ] #14500 ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ

by dar0m! 2019. 10. 10.
์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์ •๋‹ต ๋น„์œจ
2 ์ดˆ 512 MB 32.965%

 

 

14500๋ฒˆ: ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ

ํด๋ฆฌ์˜ค๋ฏธ๋…ธ๋ž€ ํฌ๊ธฐ๊ฐ€ 1×1์ธ ์ •์‚ฌ๊ฐํ˜•์„ ์—ฌ๋Ÿฌ ๊ฐœ ์ด์–ด์„œ ๋ถ™์ธ ๋„ํ˜•์ด๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค. ์ •์‚ฌ๊ฐํ˜•์€ ์„œ๋กœ ๊ฒน์น˜๋ฉด ์•ˆ ๋œ๋‹ค. ๋„ํ˜•์€ ๋ชจ๋‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ •์‚ฌ๊ฐํ˜•์˜ ๋ณ€๋ผ๋ฆฌ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ฆ‰, ๊ผญ์ง“์ ๊ณผ ๊ผญ์ง“์ ๋งŒ ๋งž๋‹ฟ์•„ ์žˆ์œผ๋ฉด ์•ˆ ๋œ๋‹ค. ์ •์‚ฌ๊ฐํ˜• 4๊ฐœ๋ฅผ ์ด์–ด ๋ถ™์ธ ํด๋ฆฌ์˜ค๋ฏธ๋…ธ๋Š” ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ๋ผ๊ณ  ํ•˜๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ 5๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ์•„๋ฆ„์ด๋Š” ํฌ๊ธฐ๊ฐ€ N×M์ธ ์ข…์ด ์œ„์— ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ ํ•˜๋‚˜๋ฅผ ๋†“์œผ๋ ค๊ณ  ํ•œ๋‹ค. ์ข…์ด๋Š” 1×1 ํฌ๊ธฐ์˜ ์นธ์œผ๋กœ ๋‚˜๋ˆ„

www.acmicpc.net

 

ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

๊ธฐ์กด ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ์—์„œ ํšŒ์ „๊ณผ ๋Œ€์นญ๋œ ๋ชจ์–‘๊นŒ์ง€ ๊ณ ๋ คํ•ด์•ผ ํ–ˆ๋Š”๋ฐ, ํšŒ์ „๋งŒ ๊ณ ๋ คํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ ํ‹€๋ ธ์—ˆ๋‹ค.

๋‹ค์Œ์˜ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์—์„œ ์ถœ๋ ฅ์€ 10์ด ๋˜์–ด์•ผ ํ•œ๋‹ค.

4 4
0 0 0 0
0 0 0 1
0 0 0 2
0 0 4 3

 

๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ๋ฅผ ๊ฐ€์ง€๊ณ  ํšŒ์ „ํ–ˆ์„ ๋•Œ, ๋Œ€์นญํ–ˆ์„ ๋•Œ ๋ชจ์–‘์„ ๋ชจ๋‘ ๊ณ ๋ คํ•œ ์ธ๋ฑ์Šค์˜ ์ด๋™์„ ์ด์ฐจ์› ๋ฐฐ์—ด์— ๋ชจ๋‘ ์ €์žฅํ•ด ๋‘๊ณ  ํ•œ ํ–‰์— ๋Œ€ํ•ด์„œ ์ˆœํšŒ๋ฅผ ํ•  ๋•Œ 4๊ฐœ์”ฉ ๋Š์–ด ํ•ฉ๊ณ„๋ฅผ ๊ตฌํ•ด MAX๊ฐ’์„ ๊ฐฑ์‹ ํ•˜์˜€๋‹ค.

 

 

๋ฉ”๋ชจ๋ฆฌ ์‹œ๊ฐ„
2984 KB 56 ms
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
typedef pair<intint> p;
int n, m, arr[505][505], ans;
vector<vector<p>> tetromino = { {{0,0},{0,1},{0,2},{0,3},{0,0},{1,0},{2,0},{3,0}}, 
                                {{0,0}, {0,1}, {1,0}, {1,1}}, 
                                {{0,0}, {1,0}, {2,0}, {2,1}, {0,0},{0,1},{0,2},{1,0},{0,0},{0,-1},{1,0},{2,0},{0,0},{0,1},{0,2},{-1,2}, {0,0},{1,0},{2,0},{2,-1}, {0,0},{1,0},{1,1},{1,2}, {0,0},{1,0},{2,0},{0,1}, {0,0},{0,1},{0,2},{1,2}},
                                {{0,0}, {1,0}, {1,1}, {2,1}, {0,0}, {0,1}, {1,-1}, {1,0},{0,0},{1,0},{1,-1},{2,-1},{0,0},{0,1},{1,1},{1,2}},
                                {{0,0},{0,1},{0,2},{1,1},{0,0},{1,0},{2,0},{1,-1},{0,0},{1,0},{1,-1},{1,1},{0,0},{1,0},{2,0},{1,1}} };
void go(int r, int c) {
    for (int i = 0; i < 5; i++) {
        int sum = 0;
        for (int j = 0; j < tetromino[i].size(); j++) {
            if (!(j % 4)) {
                ans = max(ans, sum); sum = 0;
            }
            p next = tetromino[i][j];
            int nr = r + next.first; int nc = c + next.second;
            if (nr >= 0 && nr < n && nc >= 0 && nc < m) sum += arr[nr][nc];
        }
        ans = max(ans, sum);
    }
}
int main() {
    scanf("%d%d"&n, &m);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            scanf("%d"&arr[i][j]);
        }
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            go(i, j);
        }
    }
    printf("%d", ans);
    return 0;
}
cs

 

๋Œ“๊ธ€