[Algorithm/Java] SWEA 2805번 - 농작물 수확하기
🔍 문제 풀이
풀이 방법
두 가지 방식으로 풀이할 수 있다.
- 규칙성 찾기: 행 기준으로 범위 수식 직접 계산
- 포인터 사용:
- start, end 포인터로 좌우 범위 조절
- ⚠️
i
행일때i+1
행을 증가시키기 때문에i>=m
행부터는 감소해야함
문제 도식화
💻 전체 코드
[방법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;
}
댓글남기기