๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/Programmers

[C++/PGS] Lv.2 : ๊ฒŒ์ž„ ๋งต ์ตœ๋‹จ๊ฑฐ๋ฆฌ (BFS)

by xxilliant 2023. 2. 23.
728x90
๋ฐ˜์‘ํ˜•

 

๊นŠ์ด/๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(DFS/BFS) : ๊ฒŒ์ž„ ๋งต ์ตœ๋‹จ๊ฑฐ๋ฆฌ

๋ฌธ์ œ ์ถœ์ฒ˜ - ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๊ณ ๋“์  Kit

 

 

๋ฌธ์ œ ์„ค๋ช…

ROR ๊ฒŒ์ž„์€ ๋‘ ํŒ€์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ์ง„ํ–‰ํ•˜๋ฉฐ, ์ƒ๋Œ€ ํŒ€ ์ง„์˜์„ ๋จผ์ € ํŒŒ๊ดดํ•˜๋ฉด ์ด๊ธฐ๋Š” ๊ฒŒ์ž„์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๊ฐ ํŒ€์€ ์ƒ๋Œ€ ํŒ€ ์ง„์˜์— ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ๋„์ฐฉํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ๋ถ€ํ„ฐ ๋‹น์‹ ์€ ํ•œ ํŒ€์˜ ํŒ€์›์ด ๋˜์–ด ๊ฒŒ์ž„์„ ์ง„ํ–‰ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ 5 x 5 ํฌ๊ธฐ์˜ ๋งต์—, ๋‹น์‹ ์˜ ์บ๋ฆญํ„ฐ๊ฐ€ (ํ–‰: 1, ์—ด: 1) ์œ„์น˜์— ์žˆ๊ณ , ์ƒ๋Œ€ ํŒ€ ์ง„์˜์€ (ํ–‰: 5, ์—ด: 5) ์œ„์น˜์— ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

์œ„ ๊ทธ๋ฆผ์—์„œ ๊ฒ€์€์ƒ‰ ๋ถ€๋ถ„์€ ๋ฒฝ์œผ๋กœ ๋ง‰ํ˜€์žˆ์–ด ๊ฐˆ ์ˆ˜ ์—†๋Š” ๊ธธ์ด๋ฉฐ, ํฐ์ƒ‰ ๋ถ€๋ถ„์€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ธธ์ž…๋‹ˆ๋‹ค. ์บ๋ฆญํ„ฐ๊ฐ€ ์›€์ง์ผ ๋•Œ๋Š” ๋™, ์„œ, ๋‚จ, ๋ถ ๋ฐฉํ–ฅ์œผ๋กœ ํ•œ ์นธ์”ฉ ์ด๋™ํ•˜๋ฉฐ, ๊ฒŒ์ž„ ๋งต์„ ๋ฒ—์–ด๋‚œ ๊ธธ์€ ๊ฐˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์•„๋ž˜ ์˜ˆ์‹œ๋Š” ์บ๋ฆญํ„ฐ๊ฐ€ ์ƒ๋Œ€ ํŒ€ ์ง„์˜์œผ๋กœ ๊ฐ€๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ๋‚˜ํƒ€๋‚ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ 11๊ฐœ์˜ ์นธ์„ ์ง€๋‚˜์„œ ์ƒ๋Œ€ ํŒ€ ์ง„์˜์— ๋„์ฐฉํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ 15๊ฐœ์˜ ์นธ์„ ์ง€๋‚˜์„œ ์ƒ๋Œ€ํŒ€ ์ง„์˜์— ๋„์ฐฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์œ„ ์˜ˆ์‹œ์—์„œ๋Š” ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•๋ณด๋‹ค ๋” ๋น ๋ฅด๊ฒŒ ์ƒ๋Œ€ํŒ€ ์ง„์˜์— ๋„์ฐฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—†์œผ๋ฏ€๋กœ, ์ด ๋ฐฉ๋ฒ•์ด ์ƒ๋Œ€ ํŒ€ ์ง„์˜์œผ๋กœ ๊ฐ€๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋งŒ์•ฝ, ์ƒ๋Œ€ ํŒ€์ด ์ž์‹ ์˜ ํŒ€ ์ง„์˜ ์ฃผ์œ„์— ๋ฒฝ์„ ์„ธ์›Œ๋‘์—ˆ๋‹ค๋ฉด ์ƒ๋Œ€ ํŒ€ ์ง„์˜์— ๋„์ฐฉํ•˜์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ๋‹น์‹ ์˜ ์บ๋ฆญํ„ฐ๋Š” ์ƒ๋Œ€ ํŒ€ ์ง„์˜์— ๋„์ฐฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ฒŒ์ž„ ๋งต์˜ ์ƒํƒœ maps๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์บ๋ฆญํ„ฐ๊ฐ€ ์ƒ๋Œ€ ํŒ€ ์ง„์˜์— ๋„์ฐฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ง€๋‚˜๊ฐ€์•ผ ํ•˜๋Š” ์นธ์˜ ๊ฐœ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”. ๋‹จ, ์ƒ๋Œ€ ํŒ€ ์ง„์˜์— ๋„์ฐฉํ•  ์ˆ˜ ์—†์„ ๋•Œ๋Š” -1์„ return ํ•ด์ฃผ์„ธ์š”.

 

 
BFS๋Š” ๊ณ„์† ๋น„์Šทํ•œ ๋ฌธ์ œ ํ’€์–ด๋ณด๋ฉด์„œ ์ต์ˆ™ํ•ด์ ธ์•ผ ๋  ๊ฒƒ ๊ฐ™๋‹ค
ํŒจํ„ด์ด ๋‹ค ๋น„์Šท๋น„์Šทํ•œ๋ฐ ํ‹€๋ฆฌ๋ฉด ๋„ˆ๋ฌด ์•„๊นŒ์šธ๋“ฏ!
 
 
๋‚˜์˜ ํ’€์ด (C++)
#include<vector>
#include<queue>
#include<iostream>
using namespace std;

int visited[102][102]={0,};
int re[102][102]={0,};

int solution(vector<vector<int> > maps){
    int n = maps.size();
    int m=maps[0].size();
    int answer = 0;
    int dx[4] = {0,1,0,-1};
    int dy[4] = {1,0,-1,0};
    queue<pair<int,int> > q;
    q.push({0,0});
    re[0][0]=1;
    while(!q.empty()){
        pair<int,int> a = q.front();
        q.pop();
        for(int i=0; i<4; ++i){
            int nx=a.first+dx[i];
            int ny=a.second+dy[i];
            if(nx<0||ny<0||nx>=n||ny>=m) continue;
            else if(visited[nx][ny]==1) continue;
            else if(maps[nx][ny]==0) continue;
            else{
                q.push({nx,ny});
                visited[nx][ny] = 1;
                re[nx][ny] = re[a.first][a.second]+1;
            }
        }
    }
    if(re[n-1][m-1]==0) re[n-1][m-1]=-1;
    answer = re[n-1][m-1];
    return answer;
}

 

728x90
๋ฐ˜์‘ํ˜•