문제
- Count Square Submatrices with All Ones
https://leetcode.com/problems/count-square-submatrices-with-all-ones/
풀이 방법
- 행, 열 부분합 배열을 만든다.
- 이중 for로 matrix의 모든 값을 정사각형의 모서리로 가정하고 탐색한다.
- 이때 가능한 정사각형의 최대 크기를 구해서 크기가 1, 2, ... 최대 크기의 정사각형의 개수를 구한다.
- 딴짓하다 까먹었다.
코드
class Solution {
public int countSquares(int[][] matrix) {
int row = matrix.length;
int column = matrix[0].length;
int[][] rowSum = new int[row + 1][column + 1];
int[][] colSum = new int[row + 1][column + 1];
// 행, 열 합 부분 합 배열 생성
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
rowSum[i + 1][j + 1] = rowSum[i][j + 1] + matrix[i][j];
colSum[i + 1][j + 1] = colSum[i + 1][j] + matrix[i][j];
}
}
int result = 0;
for (int i = 1; i <= row; i++) { // 행
for (int j = 1; j <= column; j++) { // 열
// if (matrix[i][j] == 1) { // 시작점
// result++; // 크기가 1인 정사각형 존재
// 최대 크기의 정사각형 구하기
// int repeat = Math.min(row - i, column - j);
int repeat = Math.min(row - i + 1, column - j + 1);
// k: 정사각형의 크기
for (int k = 1; k <= repeat; k++) {
// // 정사각형이라면
if (rowSum[i+k-1][j+k-1] - rowSum[i-1][j+k-1] == k &&
colSum[i+k-1][j+k-1] - colSum[i+k-1][j-1] == k) {
result++;
} else {
break;
}
}
}
}
return result;
}
}
오늘 회고
너무 어렵다.
내일부턴 비기기너 풀꺼다.
말리지 마라.
'코딩 테스트 > 99클럽' 카테고리의 다른 글
[99클럽] 코테 스터디 22일차 TIL - 이분탐색(1351. Count Negative Numbers in a Sorted Matrix) (1) | 2024.06.11 |
---|---|
[99클럽] 코테 스터디 21일차 TIL - 이분탐색(35. Search Insert Position) (0) | 2024.06.10 |
[99클럽] 코테 스터디 19일차 TIL - DP(1043. Partition Array for Maximum Sum) (0) | 2024.06.08 |
[99클럽] 코테 스터디 17일차 TIL - DP 재귀(894. All Possible Full Binary Trees) (0) | 2024.06.07 |
[99클럽] 코테 스터디 16일차 TIL - Greedy(프로그래머스 구명보트 Lv2) (0) | 2024.06.06 |