1 분 소요



2805. 농작물 수확하기



🔍 문제 풀이

풀이 방법

두 가지 방식으로 풀이할 수 있다.

  • 규칙성 찾기: 행 기준으로 범위 수식 직접 계산
  • 포인터 사용:
    • start, end 포인터로 좌우 범위 조절
    • ⚠️ i행일때 i+1행을 증가시키기 때문에 i>=m행부터는 감소해야함


문제 도식화

assets/images/2025/SWEA 2805.jpg



💻 전체 코드

[방법1] 규칙성 찾기

import java.io.*;

public class Solution {
    static int n;
    static int[][] arr;

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int t = Integer.parseInt(br.readLine());
        for (int tc = 1; tc <= t; tc++) {
            n = Integer.parseInt(br.readLine());
            arr = new int[n][n];

            for(int i=0; i<n; i++){
                String line = br.readLine();
                for(int j=0; j<n; j++){
                    arr[i][j] = line.charAt(j) - '0';
                }
            }

            int ans = solve();

            System.out.println("#" + tc + " " + ans);

        }
    }
    static int solve(){
        int sum = 0;
        int m = n/2;
        for(int i=0; i<n; i++){
            if(i<= m){ // 윗부분
                for(int j = m -i; j<= m +i; j++) sum+= arr[i][j];
            }else{ // 아랫부분
                for(int j = i- m; j<= n-i+m-1; j++) sum += arr[i][j];
            }
        }

        return sum;
    }
}


[방법2] 포인터 사용

static int solve() {
    int sum = 0;
    int m = n / 2;
    int s = m, e = m;

    for (int i = 0; i < n; i++) {
        for (int j = s; j <= e; j++) {
            sum += arr[i][j];
        }

        if (i < m) {
            s--; e++;
        } else {
            s++; e--;
        }
    }

    return sum;
}


카테고리:

업데이트:

댓글남기기