😎풀이

  1. perimeter: 섬의 둘레
  2. rowMax: 행 경곗값
  3. colMax: 열 경곗값
  4. 전체 행렬 순회
    4-1. 바다가 발견되었다면(0) 다음 탐색
    4-2. 첫 행이거나(위가 반드시 뚫려있음), 현재 셀 윗칸에 육지가 없을 경우 둘레 1 증가
    4-3. 마지막 열이거나(오른쪽이 반드시 뚫려있음), 현재 셀 오른쪽에 육지가 없을 경우 둘레 1 증가
    4-4. 마지막 행이거나(아래가 반드시 뚫려있음), 현재 셀 아래에 육지가 없을 경우 둘레 1 증가
    4-5. 첫 열이거나(왼쪽이 반드시 뚫려있음), 현재 셀 왼쪽에 육지가 없을 경우 둘레 1 증가
  5. 탐색된 섬의 둘레 반환
function islandPerimeter(grid: number[][]): number {
    let perimeter = 0
    const rowMax = grid.length
    const colMax = grid[0].length
    for(let row = 0; row < rowMax; row++) {
        for(let col = 0; col < colMax; col++) {
            if(!grid[row][col]) continue
          	// 윗 둘레 검증
            if(row === 0) perimeter++
            else if(grid[row - 1][col] !== 1) perimeter++
          	// 오른쪽 둘레 검증
            if(col + 1 === colMax) perimeter++
            else if(grid[row][col + 1] !== 1) perimeter++
          	// 아랫 둘레 검증
            if(row + 1 === rowMax) perimeter++
            else if(grid[row + 1][col] !== 1) perimeter++
          	// 왼쪽 둘레 검증
            if(col === 0) perimeter++
            else if(grid[row][col - 1] !== 1) perimeter++
        }
    }
    return perimeter
};
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글