๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ

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

 

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

ํด๋ฆฌ์˜ค๋ฏธ๋…ธ๋ž€ ํฌ๊ธฐ๊ฐ€ 1×1์ธ ์ •์‚ฌ๊ฐํ˜•์„ ์—ฌ๋Ÿฌ ๊ฐœ ์ด์–ด์„œ ๋ถ™์ธ ๋„ํ˜•์ด๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค. ์ •์‚ฌ๊ฐํ˜•์€ ์„œ๋กœ ๊ฒน์น˜๋ฉด ์•ˆ ๋œ๋‹ค. ๋„ํ˜•์€ ๋ชจ๋‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ •์‚ฌ๊ฐํ˜•์˜ ๋ณ€

www.acmicpc.net


1. ๋ฌธ์ œ

NxM ํฌ๊ธฐ์˜ map์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ 5์ข…๋ฅ˜์˜ ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ๋ฅผ ์ ์ ˆํžˆ ๋†“์•˜์„ ๋•Œ ๋†“์ธ ์นธ์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๋“ค์˜ ํ•ฉ์ด ์ตœ๋Œ€๊ฐ€ ๋  ๋•Œ์˜ ํ•ฉ์„ ์ถœ๋ ฅํ•œ๋‹ค.

2. ํ’€์ด

์ด ๋ฌธ์ œ๋Š” ์ •ํ™•์„ฑ์„ ์š”๊ตฌํ•œ๋‹ค. ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ค ์ฐพ์•„์„œ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

๊ฒฝ์šฐ์˜ ์ˆ˜ ํ•˜๋‚˜๋ผ๋„ ๋น ์ง€๋ฉด ๋ฐ”๋กœ ์˜ค๋‹ต ์ฒ˜๋ฆฌ๊ฐ€ ๋œ๋‹ค.

3. ์ฝ”๋“œ

import java.io.*;
import java.util.*;

public class Main {
    
	static int N, M, max, map[][];
	
	static int[][] dy = {
			{0,0,0,0},
			{0,1,2,3},
			
			{0,0,1,1},
			
			{0,0,0,-1},
			{0,0,0,1},
			{0,1,2,2},
			{0,1,2,2},
			
			{0,1,1,1},
			{0,0,1,2},
			{0,0,0,1},
			{0,0,1,2},
			
			{0,1,1,2},
			{0,1,1,2},
			{0,0,1,1},
			{0,0,-1,-1},
			
			{0,-1,-1,-1},
			{0,-1,0,1},
			{0,1,1,1},
			{0,-1,0,1}
	};
	static int[][] dx = {
			{0,1,2,3},
			{0,0,0,0},
			
			{0,1,0,1},
			
			{0,1,2,2},
			{0,1,2,2},
			{0,0,0,-1},
			{0,0,0,1},
			
			{0,0,1,2},
			{0,1,1,1},
			{0,-1,-2,-2},
			{0,-1,-1,-1},
			
			{0,0,-1,-1},
			{0,0,1,1},
			{0,1,1,2},
			{0,1,1,2},
			
			{0,-1,0,1},
			{0,1,1,1},
			{0,-1,0,1},
			{0,-1,-1,-1}
	};
	
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		N = Integer.parseInt(st.nextToken());
		M = Integer.parseInt(st.nextToken());
		map = new int[N][M];
		for (int i=0; i<N; i++) {
			st = new StringTokenizer(br.readLine());
			for (int j=0; j<M; j++) {
				map[i][j] = Integer.parseInt(st.nextToken());
			}
		}
		// ์ž…๋ ฅ ๋
		
		int len = dy.length;
		max = Integer.MIN_VALUE;
		for (int y=0; y<N; y++) {
			for (int x=0; x<M; x++) {
				for (int i=0; i<len; i++) {
					int sum = 0;
					for (int d=0; d<4; d++) {
						int ny = y+dy[i][d];
						int nx = x+dx[i][d];
						if (ny<0 || ny>=N || nx<0 || nx>=M) continue;
						sum += map[ny][nx];
					}
					max = Math.max(max, sum);
				}
			}
		}
		System.out.println(max);
	}
}

4. ์‚ฌ๋‹ด

์žฌ๋ฐŒ์—ˆ๋‹ค. ๋นก๊ตฌํ˜„ ๋ฌธ์ œ์น˜๊ณค ๋กœ์ง์ด ๋ณต์žกํ•œ ๊ฒƒ์€ ์•„๋‹ˆ์—ˆ์œผ๋‚˜ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋น ์ง์—†์ด ์ฐพ์•„์•ผ ํ•˜๋Š” ๋…ธ๊ฐ€๋‹ค์„ฑ ๋ฌธ์ œ์˜€๋‹ค.

์ดํ‹€ ๊ฑธ๋ ธ์ง€๋งŒ ์žฌ๋ฐŒ์—ˆ๋‹ค..