마름모 모양의 각 행의 시작 위치, 끝나는 위치를 변수에 기록해두면 쉽게 풀리는 문제
import java.util.*;
class Solution
{
public static void main(String args[]) throws Exception
{
Scanner sc = new Scanner(System.in);
StringBuffer sb = new StringBuffer();
int T = Integer.parseInt(sc.nextLine());
for(int tc=1; tc<=T; tc++){
sb.append("#").append(tc).append(" ");
int N = Integer.parseInt(sc.nextLine());
int map[][] = new int[N][N];
for(int i=0; i<N; i++){
String input[] = sc.nextLine().split("");
for(int j=0; j<N; j++){
map[i][j] = Integer.parseInt(input[j]);
}
}
sb.append(solve(N, map)).append("\n");
}
System.out.println(sb);
}
static int solve(int N, int map[][]){
int i = N / 2; //각 행의 시작 위치
int c = 1; //각 행의 열의 갯수
int sum = 0;
for(int r=0; r<N; r++){
int ii = i;
//각 행의 시작 위치에서 정해진 갯수만큼 더한다.
for(int j=0; j<c; j++){
sum += map[r][ii++];
}
//행이 N/2보다 크거나 같다면 열의 갯수를 2씩 줄이고, 시작 위치는 1증가한다.
if(r >= N/2){
c-=2;
i++;
}else{
c+=2;
i--;
}
}
return sum;
}
}