โœ๏ธToday I Learned

๐Ÿ“… 2025-10-27

  • DFS vs BFS
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค: ๋ฏธ๋กœํƒˆ์ถœ

DFS vs BFS

DFS

๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰
ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ๋๊นŒ์ง€ ๋“ค์–ด๊ฐ€๋‹ค ๋ง‰ํžˆ๋ฉด ๋˜๋Œ์•„์˜ค๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค.
Stack์ด๋‚˜ ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
Last In First Out ๊ตฌ์กฐ

์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

  • ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ ํƒ์ƒ‰ํ•ด์•ผ ํ•  ๋•Œ
  • ์กฐํ•ฉ ์ƒ์„ฑ
  • ๊ฒฝ๋กœ์˜ ๊ฐœ์ˆ˜ ์„ธ๊ธฐ

BFS

๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰
์‹œ์ž‘์ ์—์„œ๋ถ€ํ„ฐ ๊ฐ™์€ ๋ ˆ๋ฒจ์˜ ๋ฒ”์œ„๋ฅผ ํ•œ๊บผ๋ฒˆ์— ์ฒ˜๋ฆฌํ•œ๋‹ค.
Queue๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
Fisrt In First Out ๊ตฌ์กฐ

์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

  • ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•  ๋•Œ
  • ๋ ˆ๋ฒจ๋ณ„ ํƒ์ƒ‰์ด ํ•„์š”ํ•  ๋•Œ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค: ๋ฏธ๋กœํƒˆ์ถœ

๋ฌธ์ œ ๋งํฌ
๋ฌธ์ œ ์„ค๋ช…
1 x 1 ํฌ๊ธฐ์˜ ์นธ๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ์ง์‚ฌ๊ฐํ˜• ๊ฒฉ์ž ํ˜•ํƒœ์˜ ๋ฏธ๋กœ์—์„œ ํƒˆ์ถœํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์นธ์€ ํ†ต๋กœ ๋˜๋Š” ๋ฒฝ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋ฒฝ์œผ๋กœ ๋œ ์นธ์€ ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์—†๊ณ  ํ†ต๋กœ๋กœ ๋œ ์นธ์œผ๋กœ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ†ต๋กœ๋“ค ์ค‘ ํ•œ ์นธ์—๋Š” ๋ฏธ๋กœ๋ฅผ ๋น ์ ธ๋‚˜๊ฐ€๋Š” ๋ฌธ์ด ์žˆ๋Š”๋ฐ, ์ด ๋ฌธ์€ ๋ ˆ๋ฒ„๋ฅผ ๋‹น๊ฒจ์„œ๋งŒ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ ˆ๋ฒ„ ๋˜ํ•œ ํ†ต๋กœ๋“ค ์ค‘ ํ•œ ์นธ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์ถœ๋ฐœ ์ง€์ ์—์„œ ๋จผ์ € ๋ ˆ๋ฒ„๊ฐ€ ์žˆ๋Š” ์นธ์œผ๋กœ ์ด๋™ํ•˜์—ฌ ๋ ˆ๋ฒ„๋ฅผ ๋‹น๊ธด ํ›„ ๋ฏธ๋กœ๋ฅผ ๋น ์ ธ๋‚˜๊ฐ€๋Š” ๋ฌธ์ด ์žˆ๋Š” ์นธ์œผ๋กœ ์ด๋™ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์•„์ง ๋ ˆ๋ฒ„๋ฅผ ๋‹น๊ธฐ์ง€ ์•Š์•˜๋”๋ผ๋„ ์ถœ๊ตฌ๊ฐ€ ์žˆ๋Š” ์นธ์„ ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฏธ๋กœ์—์„œ ํ•œ ์นธ์„ ์ด๋™ํ•˜๋Š”๋ฐ 1์ดˆ๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค๊ณ  ํ•  ๋•Œ, ์ตœ๋Œ€ํ•œ ๋น ๋ฅด๊ฒŒ ๋ฏธ๋กœ๋ฅผ ๋น ์ ธ๋‚˜๊ฐ€๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ๊ตฌํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.

๋ฏธ๋กœ๋ฅผ ๋‚˜ํƒ€๋‚ธ ๋ฌธ์ž์—ด ๋ฐฐ์—ด maps๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋ฏธ๋กœ๋ฅผ ํƒˆ์ถœํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œ ์‹œ๊ฐ„์„ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”. ๋งŒ์•ฝ, ํƒˆ์ถœํ•  ์ˆ˜ ์—†๋‹ค๋ฉด -1์„ return ํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • 5 โ‰ค maps์˜ ๊ธธ์ด โ‰ค 100
  • 5 โ‰ค maps[i]์˜ ๊ธธ์ด โ‰ค 100
  • maps[i]๋Š” ๋‹ค์Œ 5๊ฐœ์˜ ๋ฌธ์ž๋“ค๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
    S : ์‹œ์ž‘ ์ง€์ 
    E : ์ถœ๊ตฌ
    L : ๋ ˆ๋ฒ„
    O : ํ†ต๋กœ
    X : ๋ฒฝ
  • ์‹œ์ž‘ ์ง€์ ๊ณผ ์ถœ๊ตฌ, ๋ ˆ๋ฒ„๋Š” ํ•ญ์ƒ ๋‹ค๋ฅธ ๊ณณ์— ์กด์žฌํ•˜๋ฉฐ ํ•œ ๊ฐœ์”ฉ๋งŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
  • ์ถœ๊ตฌ๋Š” ๋ ˆ๋ฒ„๊ฐ€ ๋‹น๊ฒจ์ง€์ง€ ์•Š์•„๋„ ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ชจ๋“  ํ†ต๋กœ, ์ถœ๊ตฌ, ๋ ˆ๋ฒ„, ์‹œ์ž‘์ ์€ ์—ฌ๋Ÿฌ ๋ฒˆ ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ’€์ด

DFS๋กœ ํ’€์—ˆ๋‹ค๊ฐ€ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๋•Œ๋ฌธ์— BFS๋กœ ์ˆ˜์ •ํ•˜๊ณ  ๋ ˆ๋ฒ„๋ฅผ ์ฐพ๊ณ  ๊ธธ์„ ๋˜๋Œ์•„ ๊ฐ€์•ผํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•ด ๊ฒฝ๋กœ ํƒ์ƒ‰์„ 2๋ฒˆ์œผ๋กœ ๋‚˜๋ˆด๋‹ค.

#include <string>
#include <vector>
#include <queue>

using namespace std;
struct Point
{
    int y;
    int x;
    int dist;
};

int bfs(int y, int x, char c, vector<string>& maps)
{
    queue<Point> q;
    vector<vector<bool>> visited(maps.size(),vector<bool>(maps[0].size()));
    
    q.push({y,x,0});
    visited[y][x] = true;
    
    int dy[]={-1,1,0,0};
    int dx[]={0,0,-1,1};
    
    while(!q.empty())
    {
        Point temp = q.front();
        q.pop();
        
        if(maps[temp.y][temp.x] == c)
        {
            return temp.dist;
        }
        
        for(int i=0; i<4; i++)
        {
            int tempY = temp.y+dy[i];
            int tempX = temp.x+dx[i];
            
            if(tempY>=0 && tempY<maps.size() && tempX>=0 && tempX<maps[0].size() 
               && !visited[tempY][tempX]
               && maps[tempY][tempX] != 'X')
            {
                visited[tempY][tempX] = true;
                q.push({tempY, tempX, temp.dist+1});
            }
        }
    }
    return -1;
}

int solution(vector<string> maps) {
    int answer = 0;
    vector<int> start(2,0);
    vector<int> lever(2,0);
    
    for(int i=0; i<maps.size(); i++)
    {
        for(int j=0; j<maps[0].size(); j++)
        {
            if(maps[i][j]=='S') start={i,j};
            if(maps[i][j]=='L') lever={i,j};
        }
    }
    
    int temp = 0;
    temp = bfs(start[0],start[1],'L', maps);
    if(temp==-1) return -1;
    answer += temp;
    
    temp =  bfs(lever[0],lever[1],'E', maps);
    if(temp==-1) return -1;
    answer += temp;
    
    return answer;
}

๐Ÿ’ก ๋А๋‚€ ์  (What I Felt)

๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€์— ๋”ฐ๋ผ ๋งž๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋จผ์ € ๊ณจ๋ผ์•ผ๊ฒ ๋‹ค.


์ถœ์ฒ˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค: ๋ฏธ๋กœํƒˆ์ถœ

0๊ฐœ์˜ ๋Œ“๊ธ€