1 분 소요



2805. 농작물 수확하기



🔍 문제 풀이

풀이 방법

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

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


문제 도식화

assets/images/2025/SWEA 2805.png



💻 전체 코드

[방법1] 규칙성 찾기

import java.io.*;
import java.util.*;

public class Solution {
    static int n, result;
    static int[][] form;

    public static void main(String[] args) throws IOException {
        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()); // 농장의 크기
            form = new int[n][n];
            for(int i=0; i<n; i++){
                String line = br.readLine();
                for(int j=0; j<n; j++){
                    char ch = line.charAt(j);
                    form[i][j] = ch - '0';
                }
            }

            solved();
            print(tc);

        }
    }
    static void solved(){
        result = 0;
        int m = n/2;

        for(int i=0; i<n; i++) {
            // 윗부분
            if(i <= m){
                for(int j=m-i; j<=m+i; j++){
                    result += form[i][j];
                }
            }
            // 아랫부분
            else{
                for(int j=i-m; j<n-(i-m); j++){
                    result += form[i][j];
                }
            }
        }
    }

    static void print(int tc){
        // 출력
        StringBuilder sb = new StringBuilder();
        sb.append("#").append(tc).append(" ");
        sb.append(result);
        System.out.println(sb);
    }
}


[방법2] 포인터 사용

static void solved() {
    result = 0;
    int m = n / 2;
    int start = m, end = m;

    for (int i = 0; i < n; i++) {
        for (int j = start; j <= end; j++) {
            result += form[i][j];
        }

        if (i < m) {
            start--;
            end++;
        } else {
            start++;
            end--;
        }
    }
}


카테고리:

업데이트:

댓글남기기