프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이방법

 

BFS(너비 우선 탐색) 알고리즘을 이용해서 최단거리를 구할 수 있다.

#include <vector>
#include <queue>

using namespace std;

bool check[101][101] = {0};
int board[101][101] = {0};

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

queue<pair<int, int>> q;

int solution(vector<vector<int> > maps) {
    int answer = 0;
    
    int m = maps.size();
    int n = maps[0].size();
    
    q.push({0,0});
    check[0][0] = true;
    board[0][0] = 1;
    
    while(!q.empty()) {
        int x = q.front().first;
        int y = q.front().second;
        
        q.pop();
        
        for(int i = 0; i < 4; i++) {
            int curX = dx[i] + x;
            int curY = dy[i] + y;
            
            if(curX < 0 || curX >= m || curY < 0 || curY >= n) continue;
            if(check[curX][curY]) continue;
            if(!maps[curX][curY]) continue;
            
            check[curX][curY] = true;
            q.push({curX, curY});
            board[curX][curY] = board[x][y] + 1;
        }
    }
    
    if(!board[m-1][n-1]) return -1;
    else return board[m-1][n-1];
}

'프로그래머스 > 2레벨' 카테고리의 다른 글

[1차] 프렌즈4블록/C++  (0) 2023.02.21
롤케이크 자르기/C++  (0) 2023.02.15
2개 이하로 다른 비트/C++  (0) 2023.02.10
[3차] n진수 게임/C++  (0) 2023.02.10
숫자 블럭/C++  (0) 2023.02.08

+ Recent posts