😎풀이

  1. rowMax: 최대 행
  2. colMax: 최대 열
  3. visited: 방문했던 셀 기억
  4. origin: 목표 타겟의 원래 값
  5. spread(sr, sc)를 통해 재귀 탐색
    5-1. 이미 방문했던 셀이거나 목표 색과 현재 셀 색이 다르다면 탐색 종료
    5-2. 현재 셀을 방문 기록에 추가하고 색을 목표 색으로 설정 후 이웃 셀 탐색
  6. 변경된 이미지 배열을 반환
function floodFill(image: number[][], sr: number, sc: number, color: number): number[][] {
    const rowMax = image.length
    const colMax = image[0].length
    const visited = new Set<string>()
    const origin = image[sr][sc]
    function spread(r: number, c: number) {
        const symbol = `row: ${r}, col: ${c}`
        if(visited.has(symbol)) return
        if(image[r][c] !== origin) return
        visited.add(symbol)
        image[r][c] = color
        if(r > 0) spread(r - 1, c)
        if(c < colMax - 1) spread(r, c + 1)
        if(r < rowMax - 1) spread(r + 1, c)
        if(c > 0) spread(r, c - 1)
    }
    spread(sr, sc)
    return image
};
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글

Powered by GraphCDN, the GraphQL CDN