농작물 수확하기 URL
내 풀이 1
import java.io.*;
public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        for (int t = 1; t <= T; t++) {
            int N = Integer.parseInt(br.readLine());
            int[][] graph = new int[N][N];
            for (int i = 0; i < N; i++) {
                String s = br.readLine();
                for (int j = 0; j < N; j++) {
                    graph[i][j] = (int) s.charAt(j) -'0';
                }
            }
            int sum = 0;
            int left = N/2, right = N/2;
            for (int i = 0; i < N; i++) {
                for (int j = left; j <= right; j++) {
                    sum += graph[i][j];
                }
                if (i < N/2) {
                    left--;
                    right++;
                } else {
                    left++;
                    right--;
                }
            }
            System.out.println("#" + t + " " + sum);
        }
    }
}
처음 생각해서 푼 방식으로 graph배열에 값을 다 입력 받은 후
- 가운데 값을 기준으로 left, right 변수를 생성
 
- 행이 N/2보다 작은경우엔 범위를 2씩 늘려야한다. 
left-- right++  
- 행이 N/2보다 크거나 같은경우엔 줄어들어야한다. 
left++ right-- 
- 반복문을 돌며 값을 다 더해준다.
 
위 방식도 맞지만 입력받으면서 더 해 주는것도 가능하다고 생각하여 입력받으면서 더해주는 방식으로 개선!
내 풀이2
import java.io.*;
public class SW2805 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        for (int t = 1; t <= T; t++) {
            int N = Integer.parseInt(br.readLine());
            int sum = 0;
            int left = N/2, right = N/2;
            for (int i = 0; i < N; i++) {
                String s = br.readLine();
                for (int j = left; j <= right; j++) {
                    sum += (int) s.charAt(j) - '0';
                }
                
                if (i < N/2) {
                    left--;
                    right++;
                } else {
                    left++;
                    right--;
                }
            }
            System.out.println("#" + t + " " + sum);
        }
    }
}
배운점

풀이 성공에 그치지 않고 더 효율적인 코드를 만들기 위해 개선하는 과정을 통해 더 나은 성장을 할 수 있을 것 같다.