👀 문제 설명
로그인해야 문제를 볼 수 있다.
✍🏻풀이
N / 2를 기준으로 두고 문제를 풀면 된다.
예를 들어, 7 * 7 농장의 경우, 수확하지 않는 부분이
3 3
2 2
1 1
0 0
1 1
2 2
3 3
이므로, 모두 가운데 기준으로 양쪽 대칭을 구하면 된다.
이 때, 대칭을 구하기 위해 extraNum 변수를 사용해서 위의 수확하지 않는 부분을 처리해주면 된다.
코드
package swea;
// 농작물 수확하기 (https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7GLXqKAWYDFAXB&categoryId=AV7GLXqKAWYDFAXB&categoryType=CODE&problemTitle=%EB%86%8D%EC%9E%91%EB%AC%BC+%EC%88%98%ED%99%95&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 )
import java.io.*;
public class SWEA_2805 {
private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
private static int N;
private static int[][] field;
public static void main(String[] args) throws Exception {
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
// input
N = Integer.parseInt(br.readLine());
field = new int[N][N];
for (int i = 0; i < N; i++) {
String str = br.readLine();
for (int j = 0; j < N; j++) {
field[i][j] = str.charAt(j) - '0';
}
}
// solve
// j는 middle을 기준으로 대칭
int middle = N / 2;
int ans = 0;
int extraNum = 0;
// 윗부분
for (int i = 0; i <= middle; i++) {
for (int j = middle - extraNum; j <= middle + extraNum; j++) {
ans += field[i][j];
}
extraNum++;
}
// 아랫부분
extraNum = 0;
for (int i = N - 1; i > middle; i--) {
for (int j = middle - extraNum; j <= middle + extraNum; j++) {
ans += field[i][j];
}
extraNum++;
}
bw.write("#" + tc + " " + ans);
bw.newLine();
}
bw.flush();
bw.close();
}
}
'숨막히는 알고말고 > 문제 풀이' 카테고리의 다른 글
[SWEA] 괄호 짝짓기 (0) | 2021.08.05 |
---|---|
[SWEA] 파리 퇴치 (0) | 2021.08.04 |
[SWEA] 상호의 배틀필드 (2) | 2021.08.04 |
[SWEA] 달팽이 숫자 (0) | 2021.08.03 |
[Baekjoon] 스위치 켜고 끄기 (0) | 2021.08.03 |