2주차 실력진단은 697점이 나왔다! 문제는 1주차와 비슷하게 풀은 것 같은데 점수가 다른 것을 보니 문제를 얼마나 빨리 풀었는지도 점수에 포함이 되는 것 같다. 푼 문제 난이도가 살짝 달랐을 수도 있지만..
https://www.codetree.ai/missions/13/problems/tromino?&utm_source=clipboard&utm_medium=text
import java.util.*;
import java.io.*;
public class Main {
static int n, m;
static int[][] grid;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stk = new StringTokenizer(br.readLine(), " ");
n = Integer.parseInt(stk.nextToken());
m = Integer.parseInt(stk.nextToken());
grid = new int[n][m];
for (int i = 0; i < n; i++) {
stk = new StringTokenizer(br.readLine(), " ");
for (int j = 0; j < m; j++) {
grid[i][j] = Integer.parseInt(stk.nextToken());
}
}
int ans = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) { // 일자 블록 가로
if (i + 2 >= n) {
continue;
}
ans = Math.max(ans, grid[i][j] + grid[i + 1][j] + grid[i + 2][j]);
}
for (int j = 0; j < m; j++) { // 일자 블록 세로
if (j + 2 >= m) {
continue;
}
ans = Math.max(ans, grid[i][j] + grid[i][j + 1] + grid[i][j + 2]);
}
for (int j = 0; j < m; j++) { // ㄴ자 모양
if (i + 1 >= n || j + 1 >= m) {
continue;
}
ans = Math.max(ans, grid[i][j] + grid[i + 1][j] + grid[i + 1][j + 1]);
}
for (int j = 0; j < m; j++) { // ㄴ자 모양 뒤집은 것
if (i - 1 < 0 || j + 1 >= m) {
continue;
}
ans = Math.max(ans, grid[i][j] + grid[i][j + 1] + grid[i - 1][j + 1]);
}
for (int j = 0; j < m; j++) { // ㄱ자 모양
if (i + 1 >= n || j + 1 >= m) {
continue;
}
ans = Math.max(ans, grid[i][j] + grid[i][j + 1] + grid[i + 1][j + 1]);
}
for (int j = 0; j < m; j++) { // ㄱ자 모양 뒤집은 것
if (i + 1 >= n || j + 1 >= m) {
continue;
}
ans = Math.max(ans, grid[i][j] + grid[i + 1][j] + grid[i][j + 1]);
}
}
System.out.println(ans);
}
}
솔직히 요즘 코딩테스트도 보고 문제도 푸는데 알고리즘보다 완전탐색 및 구현(시뮬레이션) 부분이 생각보다 약하다고 생각한다. 좀 더 많은 유형을 접하면서 익숙해지도록 노력해야할 것 같다.