Leetcode Java Island Perimeter
업데이트:
문제
코드
class Solution {
public int islandPerimeter(int[][] grid) {
int border = 0;
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[0].length; j++) {
if (grid[i][j] == 1) {
border += 4;
if (i > 0 && grid[i - 1][j] == 1) {
border -= 2;
}
if (j > 0 && grid[i][j - 1] == 1) {
border -= 2;
}
}
}
}
return border;
}
}
결과
설명
- 섬의 지도 역할을 하는 grid의 섬 둘레를 구하는 문제이다.
- 육지는 $grid[i][j] = 1$, 해상은 $grid[i][j] = 0$으로 표현한다.
-
섬의 둘레를 계산할 border를 0으로 정의한다.
- 0부터 grid의 행 개수 전까지 i를 증가시키며, 0부터 grid의 열 개수 전까지 j를 증가시키며 아래를 반복한다.
- grid[i][j]의 값이 육지인 1인 경우 아래를 수행한다.
- 해당 위치가 육지이므로, 둘레를 4 증가시킨다.
- i가 0 초과이며 해당 위치의 좌측 칸인 grid[$i - 1$][j]의 값이 1이면 두 육지가 연결되는 지점을 두 육지에서 제거해야 하므로, border를 2 감소시킨다. (예를 들어, 육지 한 칸의 둘레는 4이고, 육지 두 칸의 둘레는 6이다.)
- j가 0 초과이며 해당 위치의 위 칸인 grid[i][$j - 1$]의 값이 1이면 위와 동일한 이유로, border를 2 감소시킨다.
- grid[i][j]의 값이 육지인 1인 경우 아래를 수행한다.
- 반복이 완료되면 계산된 섬의 둘레를 저장한 border를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기