2805 농작물 수확하기

Sungmin·2023년 11월 5일
0

SWEA 알고리즘

목록 보기
14/26

농작물 수확하기 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배열에 값을 다 입력 받은 후

  1. 가운데 값을 기준으로 left, right 변수를 생성
  2. 행이 N/2보다 작은경우엔 범위를 2씩 늘려야한다. left-- right++
  3. 행이 N/2보다 크거나 같은경우엔 줄어들어야한다. left++ right--
  4. 반복문을 돌며 값을 다 더해준다.

위 방식도 맞지만 입력받으면서 더 해 주는것도 가능하다고 생각하여 입력받으면서 더해주는 방식으로 개선!

내 풀이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);
        }
    }
}

배운점

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

profile
Let's Coding

0개의 댓글