๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ป ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ C++/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ฒŒ์ž„ ๋งต ์ตœ๋‹จ๊ฑฐ๋ฆฌ

 

https://school.programmers.co.kr/learn/courses/30/lessons/1844

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

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

using namespace std;

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

int solution(vector<vector<int>> maps)
{
    int n, m;
    n = maps.size();
    m = maps[0].size();
    queue<pair<int, int>> q;
    
    // ์ถœ๋ฐœ์ง€๋Š” ์˜ˆ์•ฝ ์ž‘์—…์„ ํ•  ์ˆ˜ ์—†๊ณ  ๋ฐ”๋กœ ๋ฐฉ๋ฌธํ•ด์•ผ ํ•˜๋‹ˆ ๋ฏธ๋ฆฌ ์ž‘์—…
    q.push(make_pair(0, 0)); // ํ์— ๋„ฃ๊ธฐ
    check[0][0] = true; // ์˜ˆ์•ฝ ๊ณผ์ •

    while(!q.empty()){ // ๊ผญ ์ฒดํฌํ•ด์ฃผ๊ธฐ!
    // ๋ฐฉ๋ฌธ ๊ณผ์ •
        int x = q.front().first;
        int y = q.front().second;
        q.pop();

		// ์˜ˆ์•ฝ ๊ณผ์ • : ๋ฐฉ๋ฌธํ•œ ๊ณณ์„ ๊ธฐ์ค€์œผ๋กœ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ์ƒ-์šฐ-ํ•˜-์ขŒ ์˜ˆ์•ฝํ•˜๊ธฐ
        for(int i=0; i<4; i++){
            int nx = x + dx[i];
            int ny = y + dy[i];
            
            // ๋ฐฉ๋ฌธ ๊ฐ€๋Šฅํ• ์ง€, ์ฆ‰ ์˜ˆ์•ฝ ๊ฐ€๋Šฅํ•œ์ง€๋ฅผ ์ฒดํฌ
            if(0<=nx && nx<n && 0<=ny && ny<m){
                if(check[nx][ny] == false && maps[nx][ny] > 0){
                    check[nx][ny] = true;
                    maps[nx][ny] = maps[x][y] + 1;
                    q.push(make_pair(nx, ny));
                }
            }
        }
    }

    int answer = 0;
    if(maps[n-1][m-1] == 1){
        answer = -1;
    }else{
        answer = maps[n-1][m-1];
    }
    return answer;
}