알고리즘/프로그래머스

프로그래머스 - 찾아라 프로그래밍 마에스터 게임 맵 최단거리

시나모온 2020. 9. 2. 04:56

문제 링크입니다 : https://programmers.co.kr/learn/courses/30/lessons/1844

 

코딩테스트 연습 - 게임 맵 최단거리

[[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] 11 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]] -1

programmers.co.kr

 

bfs 문제였다!

 

 

 

 

 

 

#include <vector>
#include <queue>
#include <iostream>

using namespace std;

const int dy[4] = {0, 0, -1, 1};
const int dx[4] = {-1, 1, 0, 0};

vector<vector<bool>> visited;

int bfs(const vector<vector<int>>& maps, vector<vector<bool>>& visited) {
    
    queue<pair<int, int>> q;
    q.push({0, 0});
    visited[0][0] = true;
    
    int n = maps.size();
    int m = maps[0].size();
    
    int cnt = 0;
    while(!q.empty()) {
        int qSize = q.size();
        cnt++;
        for(int i = 0; i < qSize; i++) {
            int cy = q.front().first;
            int cx = q.front().second;
            q.pop();
            
            if(cy == n - 1 && cx == m - 1) return cnt;
            
            for(int dir = 0; dir < 4; dir++) {
                int ny = cy + dy[dir];
                int nx = cx + dx[dir];
                if(ny < 0 || ny >= n || nx < 0 || nx >= m) continue;
                if(visited[ny][nx]) continue;
                if(!maps[ny][nx]) continue;
                visited[ny][nx] = true;
                q.push({ny, nx});
            }
            
        }
    }
    
    return -1;
}

int solution(vector<vector<int>> maps)
{
    int answer = 0;
    
    vector<vector<bool>> visited(maps.size(), vector<bool>(maps[0].size(), false));
    
    answer = bfs(maps, visited);
    
    return answer;
}

 

 

 

개발 환경 : vscode

지적, 조언, 질문 환영입니다! 댓글 남겨주세요~