Leetcode Java Image Overlap
업데이트:
문제
코드
class Solution {
public int largestOverlap(int[][] img1, int[][] img2) {
int length = img1.length;
int[][] count = new int[(2 * length) + 1][(2 * length) + 1];
for (int x1 = 0; x1 < length; x1++) {
for (int y1 = 0; y1 < length; y1++) {
if (img1[x1][y1] == 1) {
for (int x2 = 0; x2 < length; x2++) {
for (int y2 = 0; y2 < length; y2++) {
if (img2[x2][y2] == 1) {
count[x1 - x2 + length][y1 - y2 + length]++;
}
}
}
}
}
}
int result = 0;
for (int[] row : count) {
for (int value : row) {
result = Math.max(result, value);
}
}
return result;
}
}
결과
설명
-
$n \times n$의 2차원 배열인 img1을 상하좌우 한 칸씩 이동하여 img2와 겹치는 칸의 개수가 가장 큰 값을 반환하는 문제이다.
- 문제 풀이에 필요한 변수를 정의한다.
- length는 img1의 길이를 저장한 변수이다.
- count는 img1과 img2를 이용하여 중첩된 칸의 개수를 계산하기 위한 변수로, $length \times 2$보다 1 큰 크기의 2차원 배열로 초기화한다.
- 0부터 length 미만까지 x1과 y1을 증가시키며 img1[x1][y1]의 값이 1이면 아래를 수행한다.
- 0부터 length 미만까지 x2와 y2를 증가시키며 img2[x2][y2]의 값이 1이면 img1과 img2가 겹치는 구간이므로 아래를 수행한다.
- count의 [$x1 - x2 + length$][$y1 - y2 + length]번째 값을 증가시켜 겹치는 구간을 개수를 증가시킨다.
- 0부터 length 미만까지 x2와 y2를 증가시키며 img2[x2][y2]의 값이 1이면 img1과 img2가 겹치는 구간이므로 아래를 수행한다.
- result는 최대 개수를 저장하기 위한 변수로, count의 모든 값들을 확인하여 최댓 값을 넣고 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기