-
[๋ฐฑ์ค(BOJ) 1926๋ฒ] ๊ทธ๋ฆผ (C++)PS(Problem Solving)/C++ 2022. 1. 21. 23:14๋ฐ์ํ
๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/1926
๋ฌธ์ ์ ๋ณด
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ํ์ง์ ์ธ๋ก ํฌ๊ธฐ n(1 ≤ n ≤ 500)๊ณผ ๊ฐ๋ก ํฌ๊ธฐ m(1 ≤ m ≤ 500)์ด ์ฐจ๋ก๋ก ์ฃผ์ด์ง๋ค. ๋ ๋ฒ์งธ ์ค๋ถํฐ n+1 ์ค ๊น์ง ๊ทธ๋ฆผ์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. (๋จ ๊ทธ๋ฆผ์ ์ ๋ณด๋ 0๊ณผ 1์ด ๊ณต๋ฐฑ์ ๋๊ณ ์ฃผ์ด์ง๋ฉฐ, 0์ ์์น ์ด ์๋ ๋ถ๋ถ, 1์ ์์น ์ด ๋ ๋ถ๋ถ์ ์๋ฏธํ๋ค)
์ถ๋ ฅ
์ฒซ์งธ ์ค์๋ ๊ทธ๋ฆผ์ ๊ฐ์, ๋์งธ ์ค์๋ ๊ทธ ์ค ๊ฐ์ฅ ๋์ ๊ทธ๋ฆผ์ ๋์ด๋ฅผ ์ถ๋ ฅํ์ฌ๋ผ. ๋จ, ๊ทธ๋ฆผ์ด ํ๋๋ ์๋ ๊ฒฝ์ฐ์๋ ๊ฐ์ฅ ๋์ ๊ทธ๋ฆผ์ ๋์ด๋ 0์ด๋ค.
ํ์ด
์ด์ค for๋ฌธ์ ํตํด ์์์ขํ๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์์ผ๋ฉด BFS ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํด๊ฒฐํ ์ ์๋ค.
์์ค ์ฝ๋
#include <bits/stdc++.h> using namespace std; #define X first #define Y second int board[502][502]; bool vis[502][502]; 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); int num = 0; // ๊ทธ๋ฆผ์ ๊ฐ์ int mx; // ๊ฐ์ฅ ๋์ ๊ทธ๋ฆผ์ ๋์ด cin >> n >> m; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> board[i][j]; } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (vis[i][j] || board[i][j] != 1) { continue; // ์ด๋ฏธ ๋ฐฉ๋ฌธํ๊ฑฐ๋ ์์น ์ด ์ ๋ ๋ถ๋ถ์ด๋ฉด ๋์ด๊ฐ๋ค. } num++; // BFS ์๊ณ ๋ฆฌ์ฆ ์์! (i, j)๊ฐ ์์์ขํ queue<pair<int, int>> Q; vis[i][j] = 1; Q.push({i, j}); int area = 0; // ๋์ด while (!Q.empty()) { area++; 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 (vis[nx][ny] || board[nx][ny] != 1) { continue; } vis[nx][ny] = 1; Q.push({nx, ny}); } } mx = max(mx, area); } } cout << num << '\n' << mx; return 0; }
๋ฐ์ํ