SW Expert Academy/D3
[SWEA/Java] 2805. 농작물 수확하기
ImJay
2024. 1. 20. 18:21
반응형
[SWEA/Java] 2805. 농작물 수확하기
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
풀이
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.*;
public class Solution {
public static void main(String[] args) throws IOException {
// 입력을 받기 위한 BufferedReader와 출력을 위한 BufferedWriter 생성
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));
// 테스트 케이스의 개수를 입력받음
int T = Integer.parseInt(bufferedReader.readLine());
// 각 테스트 케이스에 대한 반복
for (int t = 1; t <= T; t++) {
// 정사각형 행렬의 크기를 입력받음
int N = Integer.parseInt(bufferedReader.readLine());
int[][] graph = new int[N][N];
// 행렬의 값들을 입력받아 2차원 배열에 저장
for (int r = 0; r < N; r++) {
String row = bufferedReader.readLine();
for (int c = 0; c < N; c++) {
graph[r][c] = row.toCharArray()[c] - '0';
}
}
// 시작과 끝 지점 초기화
int start = (N - 1) / 2, end = (N - 1) / 2;
int cnt = 0; // 총합을 저장할 변수
boolean state = true; // 행렬의 특정 영역을 증가 또는 감소시키기 위한 상태 변수
// 행렬의 각 행을 순회하면서 합을 계산
for (int r = 0; r < N; r++) {
// 현재 행에서 시작과 끝 지점 사이의 값을 더함
for (int c = start; c <= end; c++) {
cnt += graph[r][c];
}
// 시작 지점이 0일 때 상태를 감소로 변경
if (start == 0)
state = false;
// 상태에 따라 시작과 끝 지점을 조절
if (state) {
start--;
end++;
} else {
start++;
end--;
}
}
// 결과 출력
bufferedWriter.write("#" + t + " " + cnt + "\n");
}
// 출력 버퍼 비우고 닫기
bufferedWriter.flush();
bufferedWriter.close();
}
}반응형