https://leetcode.com/problems/flood-fill/description/

문제 해결 일자 : 2024.09.24

난이도 : easy

문제 풀이 /  코드 구현 :  직접 구현 / 직접 구현

더보기

카테고리 : 배열, DFS , BFS , Matrix


문제 내용 : 

좌표(sr,sc)한곳을 시작하여 인접하고 있는 좌표들의 value값을 바꾸는 문제이다.

이때 인접은 상,하,좌,우만 해당된다.


문제 풀이 : 

시작 좌표가 주어지고 자기 자신과 다른 value값을 가졌으면 이동하지 않으면 되고 방향(상,하,좌,우)가 정해졌기에 재귀함수로 접근하여 문제를 풀었다.

 

접근 순서:

1.시작 좌표의 value값을 변경(1 -> 2)한다.

2.방향 순서로 한칸 이동한다.

3.범위를 벗어났거나 처음Value값(1)이 다르면 돌아온다 같은경우 해당 방향으로 한칸 더 이동한다.

4. 2 - 3을 방향값을 변경하며 다 변경 될때까지 반복한다.

 

구현코드

더보기
#include <iostream>
#include <vector>

using namespace std;

class Solution
{
public:

    enum dir { UP = 1, DOWN = -1, LEFT = -1, RIGHT = 1 };

    void FindPixel(vector<vector<int>>& image, int sr, int sc, int pos,int color)
    {
        if((sr < 0 || sr >= image.size()) || (sc < 0 || sc >= image[0].size()))
        {
            return;
        }

        if (image[sr][sc] != pos)
        {
            return;
        }

        image[sr][sc] = color;

        FindPixel(image, sr + UP, sc, pos, color);
        FindPixel(image, sr + DOWN, sc, pos, color);
        FindPixel(image, sr, sc + LEFT, pos, color);
        FindPixel(image, sr, sc + RIGHT, pos, color);
    }

    vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc,int color)
    {
        if (image[sr][sc] == color)
       {
           return image;
       }

        FindPixel(image, sr, sc, image[sr][sc], color);

        return image;
    }
};

 

 

'코딩테스트 > LeetCode' 카테고리의 다른 글

LeetCode :: 300. Longest Increasing Subsequence (C++)  (0) 2024.09.25

+ Recent posts