๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”ฅ PS(Problem Solving) ๐Ÿ”ฅ/BOJ

[BOJ] #10026 ์ ๋ก์ƒ‰์•ฝ

by dar0m! 2019. 10. 13.
์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์ •๋‹ต ๋น„์œจ
1 ์ดˆ 128 MB 57.637%

https://www.acmicpc.net/problem/10026

 

10026๋ฒˆ: ์ ๋ก์ƒ‰์•ฝ

๋ฌธ์ œ ์ ๋ก์ƒ‰์•ฝ์€ ๋นจ๊ฐ„์ƒ‰๊ณผ ์ดˆ๋ก์ƒ‰์˜ ์ฐจ์ด๋ฅผ ๊ฑฐ์˜ ๋Š๋ผ์ง€ ๋ชปํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ์ ๋ก์ƒ‰์•ฝ์ธ ์‚ฌ๋žŒ์ด ๋ณด๋Š” ๊ทธ๋ฆผ์€ ์•„๋‹Œ ์‚ฌ๋žŒ์ด ๋ณด๋Š” ๊ทธ๋ฆผ๊ณผ๋Š” ์ข€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค. ํฌ๊ธฐ๊ฐ€ N×N์ธ ๊ทธ๋ฆฌ๋“œ์˜ ๊ฐ ์นธ์— R(๋นจ๊ฐ•), G(์ดˆ๋ก), B(ํŒŒ๋ž‘) ์ค‘ ํ•˜๋‚˜๋ฅผ ์ƒ‰์น ํ•œ ๊ทธ๋ฆผ์ด ์žˆ๋‹ค. ๊ทธ๋ฆผ์€ ๋ช‡ ๊ฐœ์˜ ๊ตฌ์—ญ์œผ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ๋Š”๋ฐ, ๊ตฌ์—ญ์€ ๊ฐ™์€ ์ƒ‰์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๋˜, ๊ฐ™์€ ์ƒ‰์ƒ์ด ์ƒํ•˜์ขŒ์šฐ๋กœ ์ธ์ ‘ํ•ด ์žˆ๋Š” ๊ฒฝ์šฐ์— ๋‘ ๊ธ€์ž๋Š” ๊ฐ™์€ ๊ตฌ์—ญ์— ์†ํ•œ๋‹ค. (์ƒ‰์ƒ์˜ ์ฐจ์ด๋ฅผ ๊ฑฐ์˜ ๋Š๋ผ์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๊ฐ™์€

www.acmicpc.net

 

ํ•ด๊ฒฐ ๋ฐฉ์•ˆ

์ ๋ก์ƒ‰์•ฝ์ด ์•„๋‹Œ ์‚ฌ๋žŒ์ด ๋ณธ ์‹œ์„ ์œผ๋กœ ๋‚˜๋ˆ ์ง„ ๊ตฌ์—ญ๊ณผ, ์ ๋ก์ƒ‰์•ฝ์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ์ด ๋ณธ ๊ตฌ์—ญ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

์ฒ˜์Œ์˜ ํ’€์ด๋Š” ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜(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, 0sizeof(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, 0sizeof(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

๋Œ“๊ธ€