https://www.acmicpc.net/problem/1926
1926๋ฒ: ๊ทธ๋ฆผ
์ด๋ค ํฐ ๋ํ์ง์ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ ธ ์์ ๋, ๊ทธ ๊ทธ๋ฆผ์ ๊ฐ์์, ๊ทธ ๊ทธ๋ฆผ ์ค ๋์ด๊ฐ ๊ฐ์ฅ ๋์ ๊ฒ์ ๋์ด๋ฅผ ์ถ๋ ฅํ์ฌ๋ผ. ๋จ, ๊ทธ๋ฆผ์ด๋ผ๋ ๊ฒ์ 1๋ก ์ฐ๊ฒฐ๋ ๊ฒ์ ํ ๊ทธ๋ฆผ์ด๋ผ๊ณ ์ ์ํ์. ๊ฐ๋ก๋ ์ธ๋ก
www.acmicpc.net
๋ฌธ์
์ด๋ค ํฐ ๋ํ์ง์ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ ธ ์์ ๋, ๊ทธ ๊ทธ๋ฆผ์ ๊ฐ์์, ๊ทธ ๊ทธ๋ฆผ ์ค ๋์ด๊ฐ ๊ฐ์ฅ ๋์ ๊ฒ์ ๋์ด๋ฅผ ์ถ๋ ฅํ์ฌ๋ผ. ๋จ, ๊ทธ๋ฆผ์ด๋ผ๋ ๊ฒ์ 1๋ก ์ฐ๊ฒฐ๋ ๊ฒ์ ํ ๊ทธ๋ฆผ์ด๋ผ๊ณ ์ ์ํ์. ๊ฐ๋ก๋ ์ธ๋ก๋ก ์ฐ๊ฒฐ๋ ๊ฒ์ ์ฐ๊ฒฐ์ด ๋ ๊ฒ์ด๊ณ ๋๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ์ด ๋ ๊ฒ์ ๋จ์ด์ง ๊ทธ๋ฆผ์ด๋ค. ๊ทธ๋ฆผ์ ๋์ด๋ ๊ทธ๋ฆผ์ ํฌํจ๋ 1์ ๊ฐ์์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ํ์ง์ ์ธ๋ก ํฌ๊ธฐ n(1 โค n โค 500)๊ณผ ๊ฐ๋ก ํฌ๊ธฐ m(1 โค m โค 500)์ด ์ฐจ๋ก๋ก ์ฃผ์ด์ง๋ค. ๋ ๋ฒ์งธ ์ค๋ถํฐ n+1 ์ค ๊น์ง ๊ทธ๋ฆผ์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. (๋จ ๊ทธ๋ฆผ์ ์ ๋ณด๋ 0๊ณผ 1์ด ๊ณต๋ฐฑ์ ๋๊ณ ์ฃผ์ด์ง๋ฉฐ, 0์ ์์น ์ด ์๋ ๋ถ๋ถ, 1์ ์์น ์ด ๋ ๋ถ๋ถ์ ์๋ฏธํ๋ค)
์ถ๋ ฅ
์ฒซ์งธ ์ค์๋ ๊ทธ๋ฆผ์ ๊ฐ์, ๋์งธ ์ค์๋ ๊ทธ ์ค ๊ฐ์ฅ ๋์ ๊ทธ๋ฆผ์ ๋์ด๋ฅผ ์ถ๋ ฅํ์ฌ๋ผ. ๋จ, ๊ทธ๋ฆผ์ด ํ๋๋ ์๋ ๊ฒฝ์ฐ์๋ ๊ฐ์ฅ ๋์ ๊ทธ๋ฆผ์ ๋์ด๋ 0์ด๋ค.
๋ด ํ์ด
๋ํ์ง์์ ์๋ก์ด ๊ทธ๋ฆผ(?)์ ๋ง๋ ๋๋ง๋ค BFS๋ฅผ ํตํด ๊ทธ๋ฆผ์ ๋์ด๋ฅผ ๊ตฌํด์ค๋ค.
#include <iostream> #include <vector> #include <queue> using namespace std; int main() { int width, height; cin >> height >> width; vector<vector<int>> map = vector<vector<int>>(height, vector<int>(width, 0)); vector<vector<bool>> visited = vector<vector<bool>>(height, vector<bool>(width, false)); queue<pair<int, int>> q; // <height, width> int dw[4] = { 1, 0, -1, 0 }; int dh[4] = { 0, 1, 0, -1 }; for (int h = 0; h < height; ++h) { for (int w = 0; w < width; ++w) { cin >> map[h][w]; } } int count = 0; int size = 0; int max = 0; for (int h = 0; h < height; ++h) { for (int w = 0; w < width; ++w) { if (map[h][w] == 0 || visited[h][w]) continue; q.push({h, w}); ++count; size = 0; while (!q.empty()) { int h = q.front().first; int w = q.front().second; q.pop(); if (visited[h][w]) continue; visited[h][w] = true; ++size; for (int i = 0; i < 4; ++i) { int nh = h + dh[i]; int nw = w + dw[i]; if (nh < 0 || nh >= height || nw < 0 || nw >= width || map[nh][nw] == 0 || visited[nh][nw]) { continue; } q.push({nh, nw}); } } max = max < size ? size : max; } } cout << count << '\\n' << max; return 0; }
'๐ฅ๏ธ Study Note > Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 1931] ํ์์ค ๋ฐฐ์ (C++) (0) | 2023.10.26 |
---|---|
[๋ฐฑ์ค 1003] ํผ๋ณด๋์น ํจ์ (C++) (0) | 2023.10.25 |
[Hacker Rank] Organizing Containers of Balls (C++) (1) | 2023.10.09 |
[ํ๋ก๊ทธ๋๋จธ์ค]level.3 - ์นด๋ ์ง ๋ง์ถ๊ธฐ(C++) (1) | 2023.10.05 |
[ํ๋ก๊ทธ๋๋จธ์ค]level.3 - ๋ถ๋๋ณต๊ท (C++) (0) | 2023.10.04 |