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