https://www.acmicpc.net/problem/4920
4920번: 테트리스 게임
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 표의 크기 N이 주어지고, 4 ≤ N ≤ 100을 만족한다. 둘째 줄부터 표에 쓰여 있는 숫자가 주어진다. 숫자는 절댓
www.acmicpc.net
풀이
5가지 조각으로 배치할 수 있는 모든 도형의 경우의 수(총 13가지)를 배열로 지정하여 풀었다.
주의할 점
- n을 입력받을 때와 NxN 표를 입력받을 때 trim()을 해주어야 한다.
- 표에 쓰이는 숫자는 절댓값이 1,000,000을 넘지 않는 정수이다. 즉, 음수가 입력될 수 있으므로 초기 max값을 Integer.MIN_VALUE로 초기화한다.
코드
import java.io.*;
import java.util.*;
public class Main
{
static int n;
static int[][] map;
static int[][][] blocks = {
{{0,0}, {0,1}, {0,2}, {0,3}},
{{0,0}, {1,0}, {2,0}, {3,0}},
{{0,0}, {0,1}, {1,1}, {1,2}},
{{0,0}, {1,0}, {1,-1}, {2,-1}},
{{0,0}, {0,1}, {0,2}, {1,2}},
{{0,0}, {1,0}, {2,0}, {2,-1}},
{{0,0}, {1,0}, {1,1}, {1,2}},
{{0,0}, {0,1}, {1,0}, {2,0}},
{{0,0}, {0,1}, {0,2}, {1,1}},
{{0,0}, {1,0}, {1,-1}, {2,0}},
{{0,0}, {1,0}, {1,-1}, {1,1}},
{{0,0}, {1,0}, {1,1}, {2,0}},
{{0,0}, {1,0}, {0,1}, {1,1}}
};
public static void main(String args[]) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int test_case = 1;
while (true) {
n = Integer.parseInt(br.readLine().trim()); // trim하지 않으면 NumberFormatException 발생
if (n == 0) break;
map = new int[n][n];
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine().trim()); // trim
for (int j = 0; j < n; j++) {
map[i][j] = Integer.parseInt(st.nextToken().trim()); // trim
}
}
int maxSum = calMaxSum();
sb.append(test_case++).append(". ").append(maxSum).append("\n");
}
System.out.println(sb);
}
static int calMaxSum() {
int max = Integer.MIN_VALUE; // 입력값이 음수인 경우 고려
for (int idx = 0; idx < blocks.length; idx++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int sum = calSum(idx, i, j);
max = Math.max(sum, max);
}
}
}
return max;
}
static int calSum(int idx, int r, int c) {
int sum = 0;
for (int i = 0; i < blocks[idx].length; i++) {
int nr = r + blocks[idx][i][0];
int nc = c + blocks[idx][i][1];
if (nr < 0 || nr >= n || nc < 0 || nc >= n) {
return Integer.MIN_VALUE;
}
sum += map[nr][nc];
}
return sum;
}
}
참고
- https://jaejin89.tistory.com/93
- https://velog.io/@yeonju501/BOJ-4920-%ED%85%8C%ED%8A%B8%EB%A6%AC%EC%8A%A4-%EA%B2%8C%EC%9E%84
728x90
'Algorithm 문제 풀이 > 백준' 카테고리의 다른 글
[백준] 9663번 : N-Queen - 자바[Java] (0) | 2024.10.24 |
---|---|
[백준] 7576번 : 토마토 - 자바[Java] (0) | 2024.10.22 |
[백준] 15886번 : 내 선물을 받아줘 2 - 자바[Java] (1) | 2024.03.27 |
[백준] 9079번 : 동전 게임 - 자바[Java] (0) | 2024.03.09 |
[백준] 14938번 : 서강그라운드 - 자바[Java] (0) | 2024.02.02 |