본문 바로가기

Algorithm/BFS

(C++) - LeetCode (easy) 1030. Matrix Cells in Distance Order

반응형

https://leetcode.com/problems/matrix-cells-in-distance-order/description/

 

Matrix Cells in Distance Order - LeetCode

Can you solve this real interview question? Matrix Cells in Distance Order - You are given four integers row, cols, rCenter, and cCenter. There is a rows x cols matrix and you are on the cell with the coordinates (rCenter, cCenter). Return the coordinates

leetcode.com

bfs 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

상, 하, 좌, 우에 해당하는 방향 dr, dc배열을 저장해줍니다. 방문여부를 확인하는 배열 ck를 선언해줍니다. 정답 변수 ans를 선언해줍니다.

📔 풀이과정

인접한 상, 하, 좌, 우 좌표에 해당하는 원소를 bfs로 탐색하며 ans에 push_back해줍니다.

📔 정답 출력 | 반환

ans를 반환해줍니다.


📕 Code

📔 C++

using pii = pair<int,int>;
class Solution {
public:
    int dr[4] = {0, 0, 1, -1};
    int dc[4] = {1, -1, 0, 0};
    int ck[101][101];
    
    vector<vector<int>> allCellsDistOrder(int rows, int cols, int rCenter, int cCenter) {
        memset(ck,0,sizeof(ck));
        vector<vector<int>> ans = {{rCenter, cCenter}};
        queue <pii> q;
        ck[rCenter][cCenter] = 1;
        q.push({rCenter, cCenter});
        while(q.size()) {
            int r = q.front().first;
            int c = q.front().second;
            q.pop();
            for(int i = 0; i < 4; i++) {
                int nr = r + dr[i];
                int nc = c + dc[i];
                if (0 > nr || nr >= rows || 0 > nc || nc >= cols) continue;
                if(ck[nr][nc]) continue;
                ck[nr][nc] = 1;
                ans.push_back({nr, nc});
                q.push({nr, nc});
            }
        }
        return ans;
    }
};

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.