[๋ฌธ์ œํ’€์ด/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์„์œ  ์‹œ์ถ”(feat. BFS)

2025. 10. 27. 14:47ยท์•Œ๊ณ ๋ฆฌ์ฆ˜

 

๋“ค์–ด๊ฐ€๋ฉฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ์ค‘ ์ตœ๋‹จ ๊ฒฝ๋กœ ํƒ์ƒ‰์ด๋ผ๋˜์ง€, ๋…ธ๋“œ๋ฅผ ๊ตฌ์„ฑํ•ด์„œ ํƒ์ƒ‰ํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ๋“ค์ด ๊ฝค๋‚˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ๋Š” Binary Search, ๊นŠ์ด์šฐ์„ ํƒ์ƒ‰(DFS, Depth First Search), ๋„ˆ๋น„์šฐ์„ ํƒ์ƒ‰(BFS, Breadth First Search) ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋งŽ์ด ํ—ท๊ฐˆ๋ฆฌ๋Š” ๊ฒฝ์šฐ๊ฐ€ DFS๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€ BFS๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”๊ฐ€ ์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ BFS ์œ„์ฃผ๋กœ ์„ค๋ช…์„ ๋“œ๋ฆด ์˜ˆ์ •์ธ๋ฐ, ๋Œ€ํ‘œ์ ์œผ๋กœ ์ตœ๋‹จ ๊ฒฝ๋กœ ํƒ์ƒ‰, ์ตœ์†Œ ํšŸ์ˆ˜ ํƒ์ƒ‰, ๋ฐฉ๋ฌธ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋…ธ๋“œ ํƒ์ƒ‰ ๋“ฑ ์ด์ „ ์ƒํƒœ๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ํŠน์ • ๊ฒฝ๋กœ๋ฅผ ํƒ์ƒ‰ํ•  ๋•Œ BFS๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. BFS๋Š” ํƒ์ƒ‰ ๊นŠ์ด๋ฅผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์นด์šดํŒ… ๊ฐ€๋Šฅํ•œ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

bfs ๋™์ž‘ ๋ฐฉ์‹(์ถœ์ฒ˜: wikimedia)

 

ํŠน์ง•

๊ตฌ๋ถ„ BFS DFS
ํƒ์ƒ‰ ๋ฐฉ์‹ ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ถ€ํ„ฐ ํƒ์ƒ‰ ํ•œ ๊ฒฝ๋กœ๋ฅผ ๋๊นŒ์ง€ ํƒ์ƒ‰
์ž๋ฃŒ๊ตฌ์กฐ ํ(Queue) ์Šคํƒ(Stack) ๋˜๋Š” ์žฌ๊ท€
์ตœ๋‹จ ๊ฒฝ๋กœ O (๊ฐ€์ค‘์น˜ ๋™์ผ ์‹œ) X
๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ํผ (ํ์— ๋งŽ์€ ๋…ธ๋“œ ๋ณด๊ด€) ์ ์Œ (๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ํƒ์ƒ‰)
์ ํ•ฉํ•œ ๋ฌธ์ œ ์œ ํ˜• ์ตœ๋‹จ ๊ฑฐ๋ฆฌ, ์ตœ์†Œ ํšŸ์ˆ˜ ๋ชจ๋“  ๊ฒฝ์šฐ ํƒ์ƒ‰, ๊ฒฝ๋กœ ์ถ”์ 

 

๊ธฐ๋ณธ์ ์ธ BFS์˜ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. queue๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž… ํ›„ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋“ค์„ ์ˆœ์ฐจ๋กœ ์ˆœํšŒํ•˜๋ฉด์„œ queue์— pushํ•ฉ๋‹ˆ๋‹ค. ํ•œ ์ฐจ๋ก€(๋ ˆ๋ฒจ)๊ฐ€ ๋๋‚˜๋ฉด queue์—์„œ ๋…ธ๋“œ๋ฅผ popํ•˜๊ฒŒ ๋˜๋ฉด ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋“ค๋ถ€ํ„ฐ ์ˆœํšŒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

# python
def bfs(graph:Dict, start:int): # Dict ์ž๋ฃŒํ˜• ํ˜•ํƒœ๋กœ ์ค€๋‹ค. key๋Š” ๋…ธ๋“œ, value๋Š” ์ธ์ ‘๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
    visited = {i:False for i in graph.keys()} # ๋ฐฉ๋ฌธ ๋ฐฐ์—ด. visited[node] = True์ด๋ฉด node๋Š” ๋ฐฉ๋ฌธ์ด ๋๋‚œ ์ƒํƒœ์ด๋‹ค.
    queue = [start]
    visited[start] = True
    while queue: # ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
        current = queue.pop(0) #queue์—์„œ ๋…ธ๋“œ๋ฅผ ํ•˜๋‚˜ ๋นผ ์˜จ๋‹ค. ์ด ๋…ธ๋“œ๋ฅผ current๋ผ๊ณ  ํ•˜์ž.
        for nxt in graph[current]: # current์˜ ์ธ์ ‘ ๋…ธ๋“œ๋“ค์„ ํ™•์ธํ•œ๋‹ค. ์ด ๊ฐ๊ฐ์˜ ๋…ธ๋“œ๋ฅผ nxt๋ผ๊ณ  ํ•˜์ž.
            if not visited[nxt]: # ๋งŒ์ผ nxt์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด
                #nxt ๋ฐฉ๋ฌธ
                queue.append(nxt)
                visited[nxt] = True

 

 

๋ฌธ์ œํ’€์ด

๋ฐฑ์ค€ 1260

๋จผ์ € ๊ฐ„๋‹จํ•œ BFS ํ’€์ด ๋ฌธ์ œ๋ฅผ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฐฑ์ค€ 1260๋ฌธ์ œ์ž…๋‹ˆ๋‹ค(๋งํฌ).

 

ํ’€์ด ๊ณผ์ •์€ ์ž…๋ ฅ๋ฐ›์€ ์ •์ ๊ณผ ๊ฐ„์„ ์„ ํ†ตํ•ด ๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์•ž์„œ ์‚ดํŽด๋ดค๋˜ bfsํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

// ๋ฐฑ์ค€ 1260: DFS์™€ BFS
#include <iostream>
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;

vector<vector<int>> relations;
vector<bool> visited;
queue<int> q;
int N, M;

void dfs(int key)
{
    printf("%d ", key+1);
    if (!visited[key])
        visited[key] = true;
    else
        return;

    for (const auto r : relations[key])
    {
        if (!visited[r])
            dfs(r);
    }
}

void bfs(int start)
{
    q.push(start);
    visited[start] = true;

    while (!q.empty())
    {
        int current = q.front();
        printf("%d ", current + 1);
        q.pop();

        for (int next : relations[current])
        {
            if (!visited[next])
            {
                q.push(next);
                visited[next] = true;
            }
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);

    int start;
    cin >> N >> M >> start;
    relations.resize(N);
    visited = vector<bool>(N, false);

    for (int i = 0; i < M; i++)
    {
        int f, s;
        cin >> f >> s;
        relations[f-1].push_back(s-1);
        relations[s-1].push_back(f-1);
    }

    for (auto& r : relations)
        sort(r.begin(), r.end());

    dfs(start - 1);
    visited.clear();
    visited.resize(N);
    printf("\n");
    bfs(start - 1);
}

์žฌ๊ท€๋ฅผ ํ™œ์šฉํ•œ dfs๋„ ๊ฐ™์ด ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•˜์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

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

๋‹ค์Œ์€ ์‘์šฉ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์„์œ  ์‹œ์ถ” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค(๋งํฌ). PCCP ๊ธฐ์ถœ๋ฌธ์ œ๋„ค์š”.

์ž…์ถœ๋ ฅ ์˜ˆ

land result
[[0, 0, 0, 1, 1, 1, 0, 0], [0, 0, 0, 0, 1, 1, 0, 0], [1, 1, 0, 0, 0, 1, 1, 0], [1, 1, 1, 0, 0, 0, 0, 0], [1, 1, 1, 0, 0, 0, 1, 1]] 9
[[1, 0, 1, 0, 1, 1], [1, 0, 1, 0, 0, 0], [1, 0, 1, 0, 0, 1], [1, 0, 0, 1, 0, 0], [1, 0, 0, 1, 0, 1], [1, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1]] 16

์ฒซ๋ฒˆ์งธ ์˜ˆ์ œ๋Š” ์œ„ ๊ทธ๋ฆผ์ด๊ณ  ๋‘ ๋ฒˆ์งธ ์˜ˆ์ œ๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ์ž…๋‹ˆ๋‹ค.

 

Level 3์— ๊ฐ€๊นŒ์šด Level 2๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์šฐ์„  Simple BFS์—์„œ๋Š” ๋…ธ๋“œ์ง€๋งŒ ๊ฒฉ์ž ๋ชจ์–‘์—์„œ๋Š” x,y์ขŒํ‘œ๊ฐ€ ๋”ฐ๋กœ ์žˆ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ ๋ฏธ๋กœ์ฐพ๊ธฐ, ๊ธธ์ฐพ๊ธฐ ๋ฌธ์ œ์—์„œ๋Š” ๊ฒฉ์ž ๋ชจ์–‘์˜ ๋ฌธ์ œ๊ฐ€ ๋งŽ์ด ๋‚˜์˜ค๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.
๋ฌธ์ œ ์ ‘๊ทผ์˜ ํ•ต์‹ฌ์€ BFS๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ชจ๋“  ์„์œ ๋ฉ์–ด๋ฆฌ๋“ค์˜ ํ•ฉํ•œ ๊ฐ’(maxOil)์„ ๊ตฌ์„ฑํ•ด ๋†“๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋จผ์ € ์ฒซ๋ฒˆ์งธ ํ–‰๋ถ€ํ„ฐ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉด์„œ ์„์œ ๋ฅผ ๋งŒ๋‚ฌ๊ณ , ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์ง€ ์•Š์•˜๋˜ ๋…ธ๋“œ๋“ค์— ๋Œ€ํ•ด์„œ bfs๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ฒซ ๋ฒˆ์งธ์ž…๋‹ˆ๋‹ค.

#include <vector>
#include <queue>
#include <algorithm>
#include <set>

using namespace std;

int n, m;
vector<vector<bool>> visited;
int maxOil;

int solution(vector<vector<int>> land) {
    n = land.size();
    m = land[0].size();
    visited.resize(n, vector<bool>(m, false));
    
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (land[i][j] == 1 && !visited[i][j]) {
                maxOil = 0;
                bfs(i, j, land);
                ...

๋‹ค์Œ์œผ๋กœ bfsํ•จ์ˆ˜๋ฅผ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

// C++
...
int n, m;
vector<vector<bool>> visited;
int maxOil;
set<int> visitedColumns;
int dx[4] = {0,0,1,-1};
int dy[4] = {1,-1,0,0};

void bfs(int i, int j, const vector<vector<int>>& land) {
    visited[i][j] = true;
    queue<pair<int, int>> q;
    q.push(make_pair(i, j));
    
    while(!q.empty()) {
        auto current = q.front();
        maxOil++;
        //printf("[%d,%d] %d\n", current.first, current.second, maxOil);
        visitedColumns.insert(current.second);
        q.pop();
        
        for (int i = 0; i < 4; i++) {
            const int ci = current.first + dx[i];
            const int cj = current.second + dy[i];
            
            if (ci < 0 || ci >= n || cj < 0 || cj >= m)
                continue;
            
            if (land[ci][cj] == 1 && !visited[ci][cj]) {
                q.push(make_pair(ci, cj));
                visited[ci][cj] = true;
            }
        }
    }
}

์„์œ ์‹œ์ถ” ๋ฌธ์ œ์˜ bfs์—์„œ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋Š” ํ•ด๋‹น ๋…ธ๋“œ์˜ ์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ/์œ„์ชฝ/์•„๋ž˜์ชฝ 4๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ bfsํ•จ์ˆ˜์—์„œ๋„ dx,dy๋ฅผ ์ด์šฉํ•ด์„œ ๋„ค ๋ฐฉํ–ฅ์— ๋Œ€ํ•œ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. current i์™€ current j๊ฐ€ ๋”์ด์ƒ ๊ฐˆ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ , ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์„์œ ๋•…์„ ๋ชจ๋‘ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ํƒ์ƒ‰ ํ• ๋•Œ๋งˆ๋‹ค maxOil๊ฐ’์„ ๋Š˜๋ ค์„œ ์„์œ  ๋ฉ์–ด๋ฆฌ์˜ ํ•ฉ์„ ๊ตฌํ•ด๋ƒ…๋‹ˆ๋‹ค.

์ „์ฒด ์ฝ”๋“œ ์ž…๋‹ˆ๋‹ค.

#include <vector>
#include <queue>
#include <algorithm>
#include <set>

using namespace std;

int n, m;
vector<vector<bool>> visited;
int maxOil;
set<int> visitedColumns;
int dx[4] = {0,0,1,-1};
int dy[4] = {1,-1,0,0};

void bfs(int i, int j, const vector<vector<int>>& land) {
    visited[i][j] = true;
    queue<pair<int, int>> q;
    q.push(make_pair(i, j));
    
    while(!q.empty()) {
        auto current = q.front();
        maxOil++;
        //printf("[%d,%d] %d\n", current.first, current.second, maxOil);
        visitedColumns.insert(current.second);
        q.pop();
        
        for (int i = 0; i < 4; i++) {
            const int ci = current.first + dx[i];
            const int cj = current.second + dy[i];
            
            if (ci < 0 || ci >= n || cj < 0 || cj >= m)
                continue;
            
            if (land[ci][cj] == 1 && !visited[ci][cj]) {
                q.push(make_pair(ci, cj));
                visited[ci][cj] = true;
            }
        }  
    } 
}

int solution(vector<vector<int>> land) {
    n = land.size();
    m = land[0].size();
    visited.resize(n, vector<bool>(m, false));
    vector<int> oilColumns(m, 0);
    
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (land[i][j] == 1 && !visited[i][j]) {
                maxOil = 0;
                visitedColumns.clear();
                bfs(i, j, land);
                
                for (const auto& v : visitedColumns) {
                    oilColumns[v] += maxOil;
                }
                //printf("\n");
            }
        }
    }
            
    return *max_element(oilColumns.begin(), oilColumns.end());
}

bfs๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ์ „์— ์ „์—ญ๋ณ€์ˆ˜์ธ maxOil๊ณผ visitedColumns๋ฅผ ์ดˆ๊ธฐํ™” ์‹œ์ผœ์ค๋‹ˆ๋‹ค. ๋ฌธ์ œ์—์„œ ์‹œ์ถ”๊ด€(์—ด ๋ฐฉํ–ฅ)์ด ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์„์œ ๋Ÿ‰์„ ๋ฌผ์–ด๋ดค๊ธฐ ๋•Œ๋ฌธ์— ํƒ์ƒ‰ํ•œ Column์„ ์ €์žฅํ•˜๋Š” visitedColumns์™€ Column๋ณ„ ์‹œ์ถ” ๊ฐ€๋Šฅํ•œ Oil์„ ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ๋Š” oilColumns๋กœ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. oilColumns์˜ ์ตœ๋Œ€๊ฐ’์ด ์ •๋‹ต์ž…๋‹ˆ๋‹ค.

 

BFS์˜ ์ฃผ์š” ํŠน์ง•์ž…๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ ์„ค๋ช…
ํƒ์ƒ‰ ์ˆœ์„œ ์‹œ์ž‘ ๋…ธ๋“œ → ์ธ์ ‘ ๋…ธ๋“œ → ์ธ์ ‘ ๋…ธ๋“œ์˜ ์ธ์ ‘ ๋…ธ๋“œ (๊ณ„์ธต์  ํƒ์ƒ‰)
์ž๋ฃŒ๊ตฌ์กฐ ํ(Queue)๋ฅผ ์‚ฌ์šฉ
์‹œ๊ฐ„ ๋ณต์žก๋„ O(V + E) (V: ์ •์  ์ˆ˜, E: ๊ฐ„์„  ์ˆ˜)
๊ณต๊ฐ„ ๋ณต์žก๋„ O(V) (๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ๋ฐ ํ ์ €์žฅ์šฉ ๋ฉ”๋ชจ๋ฆฌ)
ํƒ์ƒ‰ ๊ฒฐ๊ณผ ์ตœ๋‹จ ๊ฒฝ๋กœ(๊ฐ€์ค‘์น˜๊ฐ€ ๋™์ผํ•  ๊ฒฝ์šฐ)๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ
๊ทธ๋ž˜ํ”„ ํ˜•ํƒœ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ, ์ธ์ ‘ ํ–‰๋ ฌ ๋ชจ๋‘ ๊ฐ€๋Šฅ
์žฌ๊ท€ ์‚ฌ์šฉ ์—ฌ๋ถ€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ˜๋ณต๋ฌธ ๊ธฐ๋ฐ˜ (DFS๋Š” ์žฌ๊ท€ ๊ธฐ๋ฐ˜์ธ ๊ฒฝ์šฐ ๋งŽ์Œ)

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'์•Œ๊ณ ๋ฆฌ์ฆ˜' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฌธ์ œํ’€์ด/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์บ ํ•‘ (2017 ์นด์นด์˜ค์ฝ”๋“œ ์˜ˆ์„ )  (0) 2025.10.24
[DFS] ์žฌ๊ท€์™€ ์Šคํƒ์œผ๋กœ ๊ฐ€๋ณ๊ฒŒ ๋ฌธ์ œ ํ’€๊ธฐ  (1) 2025.05.16
[์Šคํƒ, ํ] ๋ฐฑํŠธ๋ž˜ํ‚น(์ด์ „ ์ƒํƒœ ๊ธฐ์–ต)์€ ์Šคํƒ์„ ํ™œ์šฉํ•˜์„ธ์š”  (0) 2025.05.11
[์šฐ์„ ์ˆœ์œ„ ํ] ์ตœ์†Ÿ๊ฐ’ or ์ตœ๋Œ“๊ฐ’ ์ฐพ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜(feat. deque)  (0) 2025.04.13
[๊ธฐ๋ณธ] ํˆฌ ํฌ์ธํ„ฐ  (0) 2025.03.25
'์•Œ๊ณ ๋ฆฌ์ฆ˜' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๋ฌธ์ œํ’€์ด/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์บ ํ•‘ (2017 ์นด์นด์˜ค์ฝ”๋“œ ์˜ˆ์„ )
  • [DFS] ์žฌ๊ท€์™€ ์Šคํƒ์œผ๋กœ ๊ฐ€๋ณ๊ฒŒ ๋ฌธ์ œ ํ’€๊ธฐ
  • [์Šคํƒ, ํ] ๋ฐฑํŠธ๋ž˜ํ‚น(์ด์ „ ์ƒํƒœ ๊ธฐ์–ต)์€ ์Šคํƒ์„ ํ™œ์šฉํ•˜์„ธ์š”
  • [์šฐ์„ ์ˆœ์œ„ ํ] ์ตœ์†Ÿ๊ฐ’ or ์ตœ๋Œ“๊ฐ’ ์ฐพ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜(feat. deque)
์„œ์•„๋ž‘๐Ÿ˜ƒ
์„œ์•„๋ž‘๐Ÿ˜ƒ
Just Do It๐Ÿ’ช
  • ์„œ์•„๋ž‘๐Ÿ˜ƒ
    G-Stack
    ์„œ์•„๋ž‘๐Ÿ˜ƒ
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด๋ณด๊ธฐ (144)
      • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (78)
        • C++ ๊ธฐ์ดˆ (28)
        • C++ ์‘์šฉ (18)
        • Python (18)
        • JavaScript & NodeJS (0)
        • Go (12)
        • React & NextJS (2)
        • Java (0)
      • AI (2)
      • ์ปดํ“จํ„ฐ ๊ตฌ์กฐ & ์šด์˜์ฒด์ œ (31)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (12)
      • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (5)
      • ๋„คํŠธ์›Œํฌ (3)
      • ๋””์ž์ธํŒจํ„ด (5)
      • ์„œ๋น„์Šค & ํˆด (7)
      • ํŠธ๋ Œ๋“œ&์ด์Šˆ (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

    • G์Šคํƒ์˜ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    component
    ํŒจํ‚ค์ง€
    cpu
    c++
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ๋””์ž์ธํŒจํ„ด
    ํ•˜๋“œ๋””์Šคํฌ
    c
    ์Šคํƒ
    STD
    init
    ๋ฉ”๋ชจ๋ฆฌ
    ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ
    fork
    ํ•จ์ˆ˜
    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
    ๋ณ€์ˆ˜
    ํฌ์ธํ„ฐ
    ๋ฐฐ์—ด
    ์กฐ๊ฑด๋ฌธ
    ๋ฐ˜๋ณต๋ฌธ
    RAM
    pointer
    ์ƒ์†
    ํŒŒ์ผ์ž…์ถœ๋ ฅ
    ์ปดํ“จํ„ฐ
    ์žฌ๊ท€
    Thread
    go
    ํŒŒ์ด์ฌ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.6
์„œ์•„๋ž‘๐Ÿ˜ƒ
[๋ฌธ์ œํ’€์ด/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์„์œ  ์‹œ์ถ”(feat. BFS)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”