From 32dcc8a9114d75b43d95dafef54fd9b0aa279925 Mon Sep 17 00:00:00 2001 From: yeochaeeon Date: Fri, 2 Aug 2024 04:37:37 +0900 Subject: [PATCH] Update 0x09-BOJ --- ...0\353\247\211\353\214\200\352\270\260.cpp" | 2 +- .../Prac/1926-\352\267\270\353\246\274.cpp" | 48 ++++++++++++++++++ ...0\353\241\234\355\203\220\354\203\211.cpp" | 38 ++++++++++++++ ...-\355\206\240\353\247\210\355\206\240.cpp" | 48 ++++++++++++++++++ 0x09_BFS/Prac/BFS.cpp | 35 +++++++++++++ 0x09_BFS/Prac/test.cpp | 50 +++++++++++++++++++ 0x09_BFS/readme.md | 1 + 7 files changed, 221 insertions(+), 1 deletion(-) create mode 100644 "0x09_BFS/Prac/1926-\352\267\270\353\246\274.cpp" create mode 100644 "0x09_BFS/Prac/2178-\353\257\270\353\241\234\355\203\220\354\203\211.cpp" create mode 100644 "0x09_BFS/Prac/7576-\355\206\240\353\247\210\355\206\240.cpp" create mode 100644 0x09_BFS/Prac/BFS.cpp create mode 100644 0x09_BFS/Prac/test.cpp create mode 100644 0x09_BFS/readme.md diff --git "a/0x08_\354\212\244\355\203\235\354\235\230_\355\231\234\354\232\251(\354\210\230\354\213\235\354\235\230_\352\264\204\355\230\270_\354\214\215)/Application/10799-\354\207\240\353\247\211\353\214\200\352\270\260.cpp" "b/0x08_\354\212\244\355\203\235\354\235\230_\355\231\234\354\232\251(\354\210\230\354\213\235\354\235\230_\352\264\204\355\230\270_\354\214\215)/Application/10799-\354\207\240\353\247\211\353\214\200\352\270\260.cpp" index 6c31306..1b742a6 100644 --- "a/0x08_\354\212\244\355\203\235\354\235\230_\355\231\234\354\232\251(\354\210\230\354\213\235\354\235\230_\352\264\204\355\230\270_\354\214\215)/Application/10799-\354\207\240\353\247\211\353\214\200\352\270\260.cpp" +++ "b/0x08_\354\212\244\355\203\235\354\235\230_\355\231\234\354\232\251(\354\210\230\354\213\235\354\235\230_\352\264\204\355\230\270_\354\214\215)/Application/10799-\354\207\240\353\247\211\353\214\200\352\270\260.cpp" @@ -9,7 +9,7 @@ int main(){ if (c == '(') { // 열리는 괄호면 일단 push s.push(c); stick++; - } else { // 닫히는 괄호 + } else { // c == ')' if ( s.top() == '(') { // 레이저 s.push(c); stick--; diff --git "a/0x09_BFS/Prac/1926-\352\267\270\353\246\274.cpp" "b/0x09_BFS/Prac/1926-\352\267\270\353\246\274.cpp" new file mode 100644 index 0000000..dd06dfc --- /dev/null +++ "b/0x09_BFS/Prac/1926-\352\267\270\353\246\274.cpp" @@ -0,0 +1,48 @@ +#include +#include +#define X first +#define Y second + +int board[502][502]; +int vis[502][502]; +int dx[4] = {1,0,-1,0}; +int dy[4] = {0,1,0,-1}; + +int main(){ + // std::ios::sync_with_stdio(false); + // std::cin.tie(nullptr); + + int r,c; + std::cin >> r >> c; + std::queue> q; + + for (int i = 0 ; i < r ; i++){ + for (int j = 0; j < c ; j++){ + std::cin >> board[i][j]; + } + } + int num = 0; + int mxArea = 0; + for (int i = 0; i < r; i++){ + for(int j = 0 ; j < c ; j++){ + if (board[i][j] == 0 || vis[i][j] == 1) continue; + else { + vis[i][j] = 1; + num++; + q.push({i,j}); + int area = 0; + while(!q.empty()){ + std::pair cur = q.front(); q.pop(); area++; + for(int dir = 0 ; dir < 4 ; dir++){ + int nx = cur.X + dx[dir]; + int ny = cur.Y + dy[dir]; + if(vis[nx][ny] || board[nx][ny] != 1) continue; + vis[nx][ny] = 1; + q.push({nx,ny}); + } + } + if ( mxArea < area ) mxArea = area; + } + } + } std::cout << num << "\n" << mxArea; +} diff --git "a/0x09_BFS/Prac/2178-\353\257\270\353\241\234\355\203\220\354\203\211.cpp" "b/0x09_BFS/Prac/2178-\353\257\270\353\241\234\355\203\220\354\203\211.cpp" new file mode 100644 index 0000000..0de7165 --- /dev/null +++ "b/0x09_BFS/Prac/2178-\353\257\270\353\241\234\355\203\220\354\203\211.cpp" @@ -0,0 +1,38 @@ +#include +#include +#include + +int N,M; +std::string board[102]; +int dist[102][102]; +int dx[4] = {1,0,-1,0}; +int dy[4] = {0,1,0,-1}; + +int main(){ + + std::ios::sync_with_stdio(false); + std::cin.tie(nullptr); + + std::cin >> N >> M; + for (int i = 0 ; i < N ; i++) { + std::cin >> board[i]; + } + for(int i = 0; i < N; i++) + std::fill(dist[i],dist[i]+M,-1); + + std::queue> q; + q.push({0,0}); + dist[0][0] = 0; + while(!q.empty()){ + auto cur = q.front(); q.pop(); + for(int dir = 0 ; dir < 4; dir++){ + int nx = cur.first + dx[dir]; + int ny = cur.second + dy[dir]; + if (nx < 0 || ny < 0 || nx >= N || ny >= M ) continue; + if (dist[nx][ny] >= 0 || board[nx][ny] != '1') continue; + dist[nx][ny] = dist[cur.first][cur.second] + 1; + q.push({nx,ny}); + } + } + std::cout << dist[N-1][M-1] + 1; +} \ No newline at end of file diff --git "a/0x09_BFS/Prac/7576-\355\206\240\353\247\210\355\206\240.cpp" "b/0x09_BFS/Prac/7576-\355\206\240\353\247\210\355\206\240.cpp" new file mode 100644 index 0000000..e542577 --- /dev/null +++ "b/0x09_BFS/Prac/7576-\355\206\240\353\247\210\355\206\240.cpp" @@ -0,0 +1,48 @@ +#include +#include + +int board[1002][1002] ; +int dis[1002][1002]; + +int dx[4] = {1,0,-1,0}; +int dy[4] = {0,-1,0,1}; + +int n,m; + +int main(){ + + std::queue > q; + std::cin >> m >> n ; + for (int i = 0 ; i < n ; i++){ + for (int j = 0; j < m; j++){ + std::cin >> board[i][j]; + if ( board[i][j] == 1) q.push({i,j}); + if ( board[i][j] == 0) dis[i][j] = -1; + } + } + + while(!q.empty()){ + auto cur = q.front(); q.pop(); + for(int dir = 0 ; dir < 4; dir++){ + int nx = cur.first + dx[dir]; + int ny = cur.second + dy[dir]; + if ( nx < 0 || ny < 0 || nx >= n || ny >= m) continue; + if ( dis[nx][ny] >= 0 ) continue; + dis[nx][ny] = dis[cur.first][cur.second] + 1; + q.push({nx,ny}); + } + } + int maxDist = 0; + for (int i = 0 ; i < n; i++){ + for (int j = 0 ; j < m; j++){ + // std::cout << dis[i][j] ; + if (dis[i][j] == -1) { + std::cout << -1 ; + return 0; + } + if (dis[i][j] > maxDist) maxDist = dis[i][j]; + } + // std::cout << "\n"; + } + std::cout << maxDist ; +} \ No newline at end of file diff --git a/0x09_BFS/Prac/BFS.cpp b/0x09_BFS/Prac/BFS.cpp new file mode 100644 index 0000000..50c9fca --- /dev/null +++ b/0x09_BFS/Prac/BFS.cpp @@ -0,0 +1,35 @@ +#include +using namespace std; +#define X first +#define Y second // pair에서 first, second를 줄여서 쓰기 위해서 사용 +int board[502][502] = +{{1,1,1,0,1,0,0,0,0,0}, + {1,0,0,0,1,0,0,0,0,0}, + {1,1,1,0,1,0,0,0,0,0}, + {1,1,0,0,1,0,0,0,0,0}, + {0,1,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0} }; // 1이 파란 칸, 0이 빨간 칸에 대응 +bool vis[502][502]; // 해당 칸을 방문했는지 여부를 저장 +int n = 7, m = 10; // n = 행의 수, m = 열의 수 +int dx[4] = {1,0,-1,0}; +int dy[4] = {0,1,0,-1}; // 상하좌우 네 방향을 의미 +int main(void){ + ios::sync_with_stdio(0); + cin.tie(0); + queue > Q; + vis[0][0] = 1; // (0, 0)을 방문했다고 명시 + Q.push({0,0}); // 큐에 시작점인 (0, 0)을 삽입. + while(!Q.empty()){ + pair cur = Q.front(); Q.pop(); + cout << '(' << cur.X << ", " << cur.Y << ") -> "; + for(int dir = 0; dir < 4; dir++){ // 상하좌우 칸을 살펴볼 것이다. + int nx = cur.X + dx[dir]; + int ny = cur.Y + dy[dir]; // nx, ny에 dir에서 정한 방향의 인접한 칸의 좌표가 들어감 + if(nx < 0 || nx >= n || ny < 0 || ny >= m) continue; // 범위 밖일 경우 넘어감 + if(vis[nx][ny] || board[nx][ny] != 1) continue; // 이미 방문한 칸이거나 파란 칸이 아닐 경우 + vis[nx][ny] = 1; // (nx, ny)를 방문했다고 명시 + Q.push({nx,ny}); + } + } +} \ No newline at end of file diff --git a/0x09_BFS/Prac/test.cpp b/0x09_BFS/Prac/test.cpp new file mode 100644 index 0000000..ab235ea --- /dev/null +++ b/0x09_BFS/Prac/test.cpp @@ -0,0 +1,50 @@ +#include +#include + +using namespace std; +#define X first +#define Y second +int board[1002][1002]; +int dist[1002][1002]; +int n,m; +int dx[4] = {1,0,-1,0}; +int dy[4] = {0,1,0,-1}; +int main(void){ + ios::sync_with_stdio(0); + cin.tie(0); + cin >> m >> n; + queue> Q; + for(int i = 0; i < n; i++){ + for(int j = 0; j < m; j++){ + cin >> board[i][j]; + if(board[i][j] == 1) + Q.push({i,j}); + if(board[i][j] == 0) + dist[i][j] = -1; + } + } + while(!Q.empty()){ + auto cur = Q.front(); Q.pop(); + for(int dir = 0; dir < 4; dir++){ + int nx = cur.X + dx[dir]; + int ny = cur.Y + dy[dir]; + if(nx < 0 || nx >= n || ny < 0 || ny >= m) continue; + if(dist[nx][ny] >= 0) continue; + dist[nx][ny] = dist[cur.X][cur.Y]+1; + Q.push({nx,ny}); + } + } + int maxDist = 0; + for (int i = 0 ; i < n; i++){ + for (int j = 0 ; j < m; j++){ + std::cout << dist[i][j] ; + if (dist[i][j] == -1) { + std::cout << -1 ; + return 0; + } + if (dist[i][j] > maxDist) maxDist = dist[i][j]; + } + std::cout << "\n"; + } + std::cout << maxDist; +} \ No newline at end of file diff --git a/0x09_BFS/readme.md b/0x09_BFS/readme.md new file mode 100644 index 0000000..fe87cc3 --- /dev/null +++ b/0x09_BFS/readme.md @@ -0,0 +1 @@ +# 0x09_BFS \ No newline at end of file