본문 바로가기
programming/알고리즘 풀이

[SWEA] 2805. 농작물 수확하기

by 몽구스_ 2021. 8. 4.
728x90

 

[SWEA] 2805. 농작물 수확하기

 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

[입력]

가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.

각 테스트 케이스에는 농장의 크기 N과 농장 내 농작물의 가치가 주어진다.


[출력]

각 줄은 '#t'로 시작하고, 공백으로 농장의 규칙에 따라 얻을 수 있는 수익을 출력한다.

(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)

 

 

[풀이]

 

우선 홀수크기의 배열에 마름모꼴을 선택하게 되는 규칙을 찾았다.

첫행은 가운데 열 한칸으로 시작하고

그 이후로 계속 가운데 열을 기준으로 두칸씩 더해진다.

그리고 가운데 행에 다다르면 전체 행이 된다.

이처럼 반대로 줄여주어 마지막 행을 가운데 열 한칸만 선택하도록 했다.

 

 

public class al2805 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		int T;
		T=sc.nextInt();
		/*
		   여러 개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
		*/

		for(int test_case = 1; test_case <= T; test_case++)
		{
		
			int N = sc.nextInt();
			int[][] arr = new int[N][N];
			int center = (N - 1) / 2; //홀수의 가운데 부분
			int sum = 0;
			int S = center; //처음에 가운데에서 시작하고
			int D = center; //가운데에서 끝낸다
			

			for (int i = 0; i < N; i++) {
				char[] charr = sc.next().toCharArray();
				for (int j = 0; j < N; j++) {
					arr[i][j] = charr[j] - '0';
				}
			}
			
			for (int i = 0; i < center; i++) {
				for (int j = S; j <= D; j++) {
					sum += arr[i][j];
					
				}
				S--; 
				D++; //양옆을 늘려줌 (1->3->5)
			}
            
            //가운데 행까지 덧셈 완료. 그 이후 행부터 다시 덧셈 시작.
			
			for (int i = center; i < N; i++) {
				for (int j = S; j <= D; j++) {
					sum += arr[i][j];
				}
				S++;
				D--; //양옆을 줄여줌 (5->3->1)
			}
			
			System.out.println("#" + test_case + " " + sum);

		}
	}

}

 

  • 27,472 kb  메모리
  • 175 ms  실행시간
  • 2,571  코드길이
  • Pass  결과

 

'programming > 알고리즘 풀이' 카테고리의 다른 글

[SWEA] 1218. 괄호 짝짓기  (0) 2021.08.05
[SWEA] 2001. 파리 퇴치  (0) 2021.08.05
[leetcode] 283. Move Zeroes  (0) 2021.06.29
[leetcode] 66. Plus One  (0) 2021.06.22
[leetcode] 482. License Key Formatting  (0) 2021.06.22

댓글