์๊ฐ ์ ํ | ๋ฉ๋ชจ๋ฆฌ ์ ํ | ์ ๋ต ๋น์จ |
1 ์ด | 128 MB | 57.637% |
https://www.acmicpc.net/problem/10026
ํด๊ฒฐ ๋ฐฉ์
์ ๋ก์์ฝ์ด ์๋ ์ฌ๋์ด ๋ณธ ์์ ์ผ๋ก ๋๋ ์ง ๊ตฌ์ญ๊ณผ, ์ ๋ก์์ฝ์ ๊ฐ์ง ์ฌ๋์ด ๋ณธ ๊ตฌ์ญ์ ์๋ฅผ ์ถ๋ ฅํ๋ ๋ฌธ์ ์ด๋ค.
์ฒ์์ ํ์ด๋ ํจ์ ๋งค๊ฐ๋ณ์(x ์ขํ, y ์ขํ, color_weakness) ์ธ ๊ฐ๋ฅผ ๋ฐ์ ์์ฝ์ธ ์ฌ๋๊ณผ, ๊ทธ๋ ์ง ์์ ์ฌ๋์ ๊ตฌ๋ณํ๊ณ , color_weakness์ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ์กฐ๊ฑด๋ฌธ์ ํ์ฉํด์ ํ์๋ค.
๊ทธ๋ฌ๋ค ๋ค๋ฅธ ์ฌ๋๋ค์ ํ์ด๋ฅผ ์ฐธ๊ณ ํ์ฌ ๋ ๋ฒ์งธ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋์๋ค. ๋จผ์ ์์ฝ์ด ์๋์ฌ๋์ ์์ ์ผ๋ก ๋ดค์ ๋์ ๊ตฌ์ญ ์ถ๋ ฅํ ํ์๋ ์์ฝ ์ธ ์ฌ๋์ ์์ ๋๋ก ๋ฐฐ์ด์ ์ง์ ์์ ํ์ฌ ์๋์ dfs ์ฒ๋ผ ๋งค๊ฐ๋ณ์ ๋ ๊ฐ๋ก ๊ฐ์ ์ถ๋ ฅํ ์ ์์๋ค. ์กฐ๊ฑด๋ฌธ๋ ๋ณต์กํ์ง ์์ ํจ์ฌ ๋ณด๊ธฐ ํธํ๊ณ ๋ฉ๋ชจ๋ฆฌ๋ ๊ฐ์๋์๋ค.
์ฒซ ๋ฒ์งธ : ๋งค๊ฐ๋ณ์์ ์กฐ๊ฑด๋ฌธ ํ์ฉ
๋ฉ๋ชจ๋ฆฌ | ์๊ฐ |
2100 KB | 0 ms |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include<iostream> #include<string.h> using namespace std; #define F(x,y,u,p) for(int x = 0; x<u; x++)for(int y = 0; y<p; y++) int n, chk[105][105], dx[] = { 0,1,0,-1 }, dy[] = { 1,0,-1,0 }, cnt; char arr[105][105]; void dfs(int r, int c, int color_weakness) { int color = arr[r][c]; chk[r][c] = 1; for (int i = 0; i < 4; i++) { int nr = r + dx[i], nc = c + dy[i]; if (nr < 0 || nr >= n || nc < 0 || nc >= n || chk[nr][nc]) continue; if (!color_weakness) { if (color != arr[nr][nc]) continue; } else if (color == 'B' && color != arr[nr][nc]) continue; else if ((color == 'R' || color == 'G') && arr[nr][nc] == 'B') continue; chk[nr][nc] = 1; dfs(nr, nc, color_weakness); } } int main() { scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%s", arr[i]); } F(i, j, n, n) { if (!chk[i][j]) { dfs(i, j, 0); cnt++; } } printf("%d ", cnt); cnt = 0; memset(chk, 0, sizeof(chk)); F(i, j, n, n) { if (!chk[i][j]) { dfs(i, j, 1); cnt++; } } printf("%d", cnt); return 0; } | cs |
๋ ๋ฒ์งธ : ๋ฐฐ์ด ์ง์ ์์
๋ฉ๋ชจ๋ฆฌ | ์๊ฐ |
2052 KB | 0 ms |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #include<iostream> #include<string.h> using namespace std; #define F(x,y,u,p) for(int x = 0; x<u; x++)for(int y = 0; y<p; y++) int n, chk[105][105], dx[] = { 0,1,0,-1 }, dy[] = { 1,0,-1,0 }, cnt; char arr[105][105]; void dfs(int r, int c) { int color = arr[r][c]; chk[r][c] = 1; for (int i = 0; i < 4; i++) { int nr = r + dx[i], nc = c + dy[i]; if (nr < 0 || nr >= n || nc < 0 || nc >= n || chk[nr][nc]) continue; if (color != arr[nr][nc]) continue; chk[nr][nc] = 1; dfs(nr, nc); } } int main() { scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%s", arr[i]); } F(i, j, n, n) { if (!chk[i][j]) { dfs(i, j); cnt++; } } printf("%d ", cnt); cnt = 0; memset(chk, 0, sizeof(chk)); F(i, j, n, n) { if (arr[i][j] == 'G') arr[i][j] = 'R'; } F(i, j, n, n) { if (!chk[i][j]) { dfs(i, j); cnt++; } } printf("%d", cnt); return 0; } | cs |
'๐ฅ PS(Problem Solving) ๐ฅ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] #9205 ๋งฅ์ฃผ ๋ง์๋ฉด์ ๊ฑธ์ด๊ฐ๊ธฐ (0) | 2019.10.15 |
---|---|
[BOJ] #1012 ์ ๊ธฐ๋ ๋ฐฐ์ถ (0) | 2019.10.14 |
[BOJ] #1260 DFS์ BFS (0) | 2019.10.13 |
[BOJ] #11403 ๊ฒฝ๋ก ์ฐพ๊ธฐ (0) | 2019.10.13 |
[BOJ] #2589 ๋ณด๋ฌผ์ฌ (0) | 2019.10.13 |
๋๊ธ