본문 바로가기

숨막히는 알고말고/문제 풀이

[SWEA] 농작물 수확하기

👀 문제 설명

문제

로그인해야 문제를 볼 수 있다.

 

✍🏻풀이

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