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 |
댓글