본문 바로가기

알고리즘 문제풀이/SWEA(SW Expert Academy)

[SWEA][JAVA]2001 - 파리 퇴치

문제 출처: https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PzOCKAigDFAUq&categoryId=AV5PzOCKAigDFAUq&categoryType=CODE&problemTitle=2001&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

문제

 

 

설명

파리채의 위치를 한번 옮길 때마다 죽은 파리의 수를 새롭게 계산했고, 그것을 max값과 비교하여 업데이트했습니다.

N, M값에 따른 전체 반복 횟수, x와 y의 좌표 계산이 중요한 문제입니다.

 

 

코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class SWEA2001_CatchFlies {

	public static void main(String[] args) throws Exception{
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		int T = Integer.parseInt(br.readLine());
		StringBuilder sb = new StringBuilder();
		
		for(int tc=1; tc<=T; tc++) {
			st=new StringTokenizer(br.readLine(), " ");
			
			int N = Integer.parseInt(st.nextToken());
			int M = Integer.parseInt(st.nextToken());
			
			int[][] map = new int[N][N];
			for(int i=0; i<N; i++) {
				st = new StringTokenizer(br.readLine(), " ");
				for(int j=0; j<N; j++) {
					map[i][j]=Integer.parseInt(st.nextToken());
				}
			}
			//입력 완료
			
			int x=0, y=0;
			int max=0;
			
			//위쪽부터, -> 방향으로 진행하며 밑으로 한 칸씩 내려오는 방향으로 계산
			for(int l=0; l<N-M+1; l++) {
				y=0; //다시 초기화
				for(int k=0; k<N-M+1; k++) {
					int sum=0;
					
					for(int i=x; i<M+x; i++) {// 한 차례 계산
						
						for(int j=y; j<M+y; j++) {
							sum+=map[i][j];
						 }
					   }
					if (max<sum)
						max=sum;
					
					y++;
				}
				x++;
			}
		sb.append("#"+tc+" "+max).append("\n");
			
		}
		System.out.println(sb);
	}
}