๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
CS/์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ฐฑ์ค€ 14500๋ฒˆ ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ ์™„์ „ํƒ์ƒ‰(brute-force) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ :: ์ฝ”๋“œ์ž๋ชฝ

by ๐ŸŒปโ™š 2019. 12. 23.

[๋ฐฑ์ค€] 14500๋ฒˆ ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ

 

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

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

www.acmicpc.net

ํ’€์ด

 

 

์ด๋Ÿฐ ๋ธ”๋ก ํ˜•ํƒœ์˜ ๋ฌธ์ œ๊ฐ€ ๋‚˜์˜ค๋ฉด ์‹ค์ œ๋กœ ๋„ํ˜•์„ ๊ทธ๋ ค๋ณด๋ฉด์„œ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ธ ๊ฒƒ ๊ฐ™๋‹ค. ๋จผ์ € N*M ํฌ๊ธฐ์˜ ์ข…์ด ์œ„์— ๋ธ”๋ก ํ•˜๋‚˜๋งŒ ๋†“๋Š”๋‹ค๊ณ  ํ–ˆ์œผ๋‹ˆ ๊ฐ ๋ธ”๋ก์ด ๋†“์ผ ์ˆ˜ ์žˆ๋Š” ๋ชจ์–‘ ์ „๋ถ€๋ฅผ ๊ทธ๋ ค๋ณด์•˜๋‹ค. ํšŒ์ „๊ณผ ๋’ค์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋‘ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋„ํ˜•์˜ ๋ชจ์–‘์€ 19๊ฐ€์ง€๊ฐ€ ๋‚˜์˜จ๋‹ค. ์ €๋Š” ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด 3์ฐจ์› ๋ฐฐ์—ดํ˜•์‹์œผ๋กœ ์ขŒ์ธก ์ƒ๋‹จ์„ (0,0)์œผ๋กœ ์ƒ๊ฐํ•˜๊ณ  ๊ฐ ๋ธ”๋ก์˜ ๋ชจํ˜•์„ ๋„ฃ์–ด์„œ ํ’€๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๋ธ”๋ก์ด ๋†“์ธ ์นธ์˜ ํ•ฉ์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ชจ๋“  ๋ธ”๋ก์ด ์ข…์ด ์œ„๋กœ ์˜ฌ๋ผ๊ฐ€์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ๋ฐฐ์น˜๋ฅผ ํ•  ์ˆ˜ ์—†๋Š” ๋ถ€๋ถ„๋“ค๋„ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์ค˜์•ผ ํ•œ๋‹ค. ์„ธ๋กœ N ๊ฐ€๋กœ M์ด๋ผ๊ณ  ํ–ˆ์„ ๋•Œ ์•„๋ž˜์™€ ๊ฐ™์ด 3*4 ๋ชจํ˜•์˜ ์ข…์ด์—์„œ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์ž.

 

์œ„์™€ ๊ฐ™์ด 18๋ฒˆ๋ชจ์–‘์˜ ๋ธ”๋ก์„ ์ข…์ด์œ„์— ์˜ฌ๋ ค๋†“์„ ์ˆ˜ ์žˆ๋‹ค. ์ข…์ด๋ฅผ ๊ทธ๋ฆฌ๋“œ๋กœ ๋ดค์„ ๋•Œ ์ขŒํ‘œ (N, M)์ด (0,0)์— ์œ„์น˜ํ•ด์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋ธ”๋ก์€ ์ „์ฒด 12๊ฐœ์˜ ์นธ ์ค‘์— ๋†“์„ ์ˆ˜ ์žˆ๋Š” ์œ„์น˜์˜ ๊ฒฝ์šฐ๋Š” ๋ช‡ ๊ฐ€์ง€๊ฐ€ ์•ˆ๋œ๋‹ค.

 

 

ํ•ด๋‹น ๋ชจ์–‘์œผ๋กœ๋Š” 12๊ฐ€์ง€์˜ ์ขŒํ‘œ ์œ„์น˜ ์ค‘ (0,0), (1,0), (2,0)์˜ ์œ„์น˜ ๋”ฑ 3๊ฐ€์ง€ ๊ฒฝ์šฐ์—๋งŒ ๋ธ”๋ก์„ ์ข…์ด ์œ„๋กœ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋‹ค. ์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋ชจ์–‘์— ๋”ฐ๋ผ ์ข…์ด์— ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์‹์œผ๋กœ ํ‘œํ˜„ํ•ด๋ณด์ž. (ํ™•์ธํ•  ๋ชจ์–‘์˜ ์„ธ๋กœ๋ฅผ ์†Œ๋ฌธ์žn, ๊ฐ€๋กœ๋ฅผ ์†Œ๋ฌธ์ž m)

์ข…์ด ์œ„ ๋ธ”๋ก์„ ์˜ฌ๋ ค๋†“์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ = (N+1-n)(M+1-m)

๋ธŒ๋ฃจํŠธ ํฌ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์‹œ๋„ํ•ด๋ณด๋Š” ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ, ๊ฒฝ์šฐ์˜ ์ˆ˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ์•Œ์•„๋‚ธ ๋ธ”๋ก๊ณผ ์ข…์ด์˜ ์›๋ฆฌ๋ฅผ ๋‘๊ณ  ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด ์ตœ๋Œ€ ๋ช‡ ๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํ™•์ธํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์ž.

 

๋จผ์ € ์ด๋ธ”๋ก์˜ ๊ฐœ์ˆ˜๋Š” 19๊ฐœ์ด๋‹ค. ๋‹ค์Œ ์ข…์ด ์œ„์˜ ๊ฐ ์ขŒํ‘œ์˜ ์œ„์น˜ ์„ธ๋กœ N, ๊ฐ€๋กœ M์„ ํ•œ ๋ฒˆ์”ฉ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค. ์ดํ›„ ํ•ด๋‹น ์ขŒํ‘œ์—์„œ ๋ธ”๋ก ์œ„์น˜(4)์˜ ๊ฐ ์ˆซ์ž๋ฅผ ํ•ฉํ•ด์•ผ ํ•œ๋‹ค. ํ™•์ธํ•ด์•ผ ํ•  ์ตœ๋Œ€ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š”

์ด ๋ธ”๋ก ๋ชจ์–‘ ๊ฐœ์ˆ˜ 19 * ์ตœ๋Œ€ N 500 * ์ตœ๋Œ€ M 500 * ๋ธ”๋ก ์œ„์น˜ 4 = 19,000,000

๊ฐ„๋‹จํ•˜๊ฒŒ ๊ณ„์‚ฐํ•œ ๊ฐ’์€ 1900๋งŒ ์ •๋„๊ฐ€ ๋‚˜์™”๋‹ค. ์ €์˜ ๊ธฐ์ค€์€ 1์ฒœ๋งŒ ์ •๋„์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜ ์ดํ•˜์ธ ๊ฒฝ์šฐ์—๋งŒ ๋ธŒ๋ฃจํŠธ ํฌ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๊ณ„์‚ฐํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜์—์„œ ๋ชจ๋“  ๋ธ”๋ก์˜ ์œ„์น˜๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ๋ธ”๋ก์ด ๋ฐ–์œผ๋กœ ๋‚˜๊ฐ”๋‹ค๊ณ  ํŒ๋‹จ๋˜์—ˆ์„ ๋•Œ break ๋ฌธ์ด๋‚˜ continue๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ตœ๋Œ€ ๋Œ€๋žต 1000๋งŒ ์ •๋„์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋กœ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•ด์„œ ๋ชจ๋‘ ํ™•์ธํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” ์•„์Šฌ์•„์Šฌํ–ˆ์ง€๋งŒ, ๋ฌธ์ œ์—†์ด ํ†ต๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค.

 ํ†ต๊ณผ ํ›„ ์ฑ„์  ํ˜„ํ™ฉ์—์„œ ๋‹ค๋ฅธ ํ’€์ด๋“ค์˜ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ์ฝ”๋“œ์˜ ๊ธธ์ด๋Š” ๋‹ค๋ฅธ ํ’€์ด๋ณด๋‹ค ์งง์•˜์œผ๋‚˜ ์†๋„ ์ธก๋ฉด์—์„œ๋Š” ๊ฒจ์šฐ ํ†ต๊ณผํ–ˆ๋“ฏ์ด ๋งŽ์ด ๋Š๋ ธ์Šต๋‹ˆ๋‹ค. ์กฐ๊ธˆ ๋” ์‹ ๊ฒฝ ์จ์„œ ์ฝ”๋“œ ๊ฐœ์„ ์„ ํ•ด๋ณด๋ฉด ๋” ์ข‹์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋„ค์š”.

 

Java

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import java.util.*;
 
public class Main {
    static int[][][] BLOCKS = {
        {{0,0}, {0,1}, {0,2}, {0,3}}
        ,{{0,0}, {1,0}, {2,0}, {3,0}}
        ,{{0,0}, {1,0}, {0,1}, {1,1}}
        ,{{0,0}, {0,1}, {0,2}, {1,2}}
        ,{{0,0}, {1,0}, {2,0}, {0,1}}
        ,{{0,0}, {1,0}, {1,1}, {1,2}}
        ,{{2,0}, {0,1}, {1,1}, {2,1}}
        ,{{1,0}, {1,1}, {1,2}, {0,2}}
        ,{{0,0}, {0,1}, {1,1}, {2,1}}
        ,{{0,0}, {1,0}, {0,1}, {0,2}}
        ,{{0,0}, {1,0}, {2,0}, {2,1}}
        ,{{0,0}, {1,0}, {2,0}, {1,1}}
        ,{{1,0}, {0,1}, {1,1}, {1,2}}
        ,{{0,1}, {1,0}, {1,1}, {2,1}}
        ,{{0,0}, {0,1}, {0,2}, {1,1}}
        ,{{0,0}, {0,1}, {1,1}, {1,2}}
        ,{{0,1}, {1,1}, {1,0}, {2,0}}
        ,{{1,0}, {1,1}, {0,1}, {0,2}}
        ,{{0,0}, {1,0}, {1,1}, {2,1}}
    };
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(), m = sc.nextInt();
        int[][] arr = new int[n][m];
        int max = 0;
        for(int i=0; i<n; i++){
            for (int j=0;  j<m; j++){
                arr[i][j] = sc.nextInt();
            }
        }
 
        for(int i=0; i<BLOCKS.length; i++){
            int[][] block = BLOCKS[i];
            for(int j=0; j<n; j++){
                middleLoop : for(int k=0; k<m; k++){
                    int sum = 0;
                    for(int l=0; l<4; l++){
                        if(j+block[l][0]>=|| k+block[l][1]>=m){
                            continue middleLoop;
                        }else{
                            sum += arr[j+block[l][0]][k+block[l][1]];
                        }
                    }
                    if(sum > max) max = sum;
                }
            }
        }
        System.out.println(max);
    }
}
 

๋Œ“๊ธ€