마름모 모형에 공간을 어떻게 구할지에 대해서 생각해야했다.
마름모 모형에 공간이 어떤 식으로 이루어지는 직접 적어보며 규칙을 파악했다.
주어지는 입력이 어떤 형태인지 확인하고 입력 받자
코드들 다 작성하고 돌리는데 계속 오류가 났다. 인덱스를 초과할 일이 없을텐데..하고 싶어서 보니까 값을
1 2 3
4 5 6
7 8 9
이렇게 주어진 게 아니고 123 456 789 이렇게 주어져서 내가 직접 나누어야했다. 그래서 nextInt로 값을 받고 그 다음에 직접 /10, %10을 이용해서 하나씩 배열에 배정을 했는데 이 방법에서도 오류가 났다.
주어지는 입력의 공간까지 고려해서 받자. Int,Long..
농장이 최대 49*49니까 최대 49길이에 숫자가 주어지고 이를 나눠야하기 때문에 int를 사용해서 직접 자리수를 나누는 행위는 옳지 않아보였다. 이를 위해서 String형태를 사용하고 charAt을 사용하니 쉽게 해결!
import java.util.*;
import java.io.*;
class Solution
{
public static void main(String args[]) throws Exception
{
Scanner sc = new Scanner(System.in);
int T=sc.nextInt();
for(int test_case = 1; test_case <= T; test_case++)
{
System.out.print("#" + test_case + " ");
int size = sc.nextInt();
int[][] farm = new int[size][size];
//입력받아서 INT배열에 담기
for(int i = 0 ; i < size; i++){
String temp = sc.next();
for(int j = 0 ; j < temp.length(); j++){
farm[i][j] = temp.charAt(j)-'0';
}
}
int sum = 0;
int start = size/2;
int cnt = 1;
//중앙까지 진행
for(int i = 0 ; i <= size/2; i++){
int saveStart = start;
for(int j= 0 ; j<cnt; j++){
sum += farm[i][saveStart];
saveStart++;
}
start--;
cnt+=2;
}
//중앙보다 한 칸 밑에서 끝까지.
start = 1;
cnt = size-2;
for(int i = size/2+1; i < size; i++){
int saveStart = start;
for(int j= 0 ; j<cnt; j++){
sum += farm[i][saveStart];
saveStart++;
}
start++;
cnt-=2;
}
System.out.println(sum);
}
}
}
내가 쓴 코드는 전체를 기준으로 2번을 나누어 반복문이 수행되는데 이를 하나의 반복문 안에서 빠르게 처리하는 게 당연 더 좋을 것이다!
이를 위해서 현재 i가 어디를 지나고 있는지만 파악하면 쉽게 해결할 수 있다.
즉 i가 중앙을 기준으로 초과인지 이하인지 판단하면 된다!
import java.util.*;
import java.io.*;
class Solution
{
public static void main(String args[]) throws Exception
{
Scanner sc = new Scanner(System.in);
int T=sc.nextInt();
for(int test_case = 1; test_case <= T; test_case++)
{
System.out.print("#" + test_case + " ");
int size = sc.nextInt();
int[][] farm = new int[size][size];
//입력받아서 INT배열에 담기
for(int i = 0 ; i < size; i++){
String temp = sc.next();
for(int j = 0 ; j < temp.length(); j++){
farm[i][j] = temp.charAt(j)-'0';
}
}
int sum = 0;
int start = size/2;
int cnt = 1;
//중앙까지 진행
for(int i = 0 ; i < size; i++){
int saveStart = start;
for(int j= 0 ; j<cnt; j++){
sum += farm[i][saveStart];
saveStart++;
}
if(i < size/2){
start--;
cnt+=2;
}
else if(i >= size/2){
start++;
cnt -=2;
}
}
System.out.println(sum);
}
}
}