노력만이 살길!/알고리즘
[JAVA][SWEA] 2805 농작물 수확하기
갱스타
2022. 2. 26. 00:46
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7GLXqKAWYDFAXB
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
[제약 사항]
농장의 크기 N은 1 이상 49 이하의 홀수이다. (1 ≤ N ≤ 49)
농작물의 가치는 0~5이다.
[입력]
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스에는 농장의 크기 N과 농장 내 농작물의 가치가 주어진다.
[출력]
각 줄은 '#t'로 시작하고, 공백으로 농장의 규칙에 따라 얻을 수 있는 수익을 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
이런 문제는 무조건 구역을 나누는게 정석!
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution{
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st=new StringTokenizer(br.readLine());
int T=Integer.parseInt(st.nextToken());
for (int tc = 1; tc <= T; tc++) {
st=new StringTokenizer(br.readLine());
int N=Integer.parseInt(st.nextToken());
int[][] map=new int[N][N];
int sumsum=0;
for (int i = 0; i < N; i++) {
String line=br.readLine();
for (int j = 0; j < N; j++) {
map[i][j]=Integer.parseInt(String.valueOf(line.charAt(j)));
sumsum+=map[i][j];
}
}
if(N==1){
System.out.printf("#%d %d%n",tc,sumsum);
continue;
}
int S=N/2;
//왼쪽 위
int sum=0;
for (int i = 0; i <S ; i++) {
for (int j = 0; j <S-i; j++) {
sum+=map[i][j];
}
}
//왼쪽 아래
for (int i = S+1; i < N; i++) {
for (int j = 0; j < i-S; j++) {
sum+=map[i][j];
}
}
//오른쪽 위
for (int i = 0; i <S ; i++) {
for (int j = S+i+1; j <N; j++) {
sum+=map[i][j];
}
}
//오른쪽 아래
for (int i = S+1; i < N; i++) {
for (int j = N-(i-S); j < N; j++) {
sum+=map[i][j];
}
}
System.out.printf("#%d %d%n",tc,sumsum-sum);
}
}
}