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

[BOJ] #2589 ๋ณด๋ฌผ์„ฌ

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

 

 

2589๋ฒˆ: ๋ณด๋ฌผ์„ฌ

๋ณด๋ฌผ์„ฌ ์ง€๋„๋ฅผ ๋ฐœ๊ฒฌํ•œ ํ›„ํฌ ์„ ์žฅ์€ ๋ณด๋ฌผ์„ ์ฐพ์•„๋‚˜์„ฐ๋‹ค. ๋ณด๋ฌผ์„ฌ ์ง€๋„๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ง์‚ฌ๊ฐํ˜• ๋ชจ์–‘์ด๋ฉฐ ์—ฌ๋Ÿฌ ์นธ์œผ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ๋‹ค. ๊ฐ ์นธ์€ ์œก์ง€(L)๋‚˜ ๋ฐ”๋‹ค(W)๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ๋‹ค. ์ด ์ง€๋„์—์„œ ์ด๋™์€ ์ƒํ•˜์ขŒ์šฐ๋กœ ์ด์›ƒํ•œ ์œก์ง€๋กœ๋งŒ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ•œ ์นธ ์ด๋™ํ•˜๋Š”๋ฐ ํ•œ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค. ๋ณด๋ฌผ์€ ์„œ๋กœ ๊ฐ„์— ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋กœ ์ด๋™ํ•˜๋Š”๋ฐ ์žˆ์–ด ๊ฐ€์žฅ ๊ธด ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ์œก์ง€ ๋‘ ๊ณณ์— ๋‚˜๋‰˜์–ด ๋ฌปํ˜€์žˆ๋‹ค. ์œก์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ๊ณณ ์‚ฌ์ด๋ฅผ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋กœ ์ด๋™ํ•˜๋ ค๋ฉด ๊ฐ™์€ ๊ณณ์„ ๋‘ ๋ฒˆ ์ด์ƒ ์ง€

www.acmicpc.net

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

๋ณด๋ฌผ์˜ ์‹œ์ž‘ ์ ๊ณผ ๋ ์ ์„ ๋ชจ๋ฅด๋Š” ์ƒํƒœ์—์„œ ๊ฐ€์žฅ ํฐ ์œก์ง€์˜ ๋๊ณผ ๋์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์ค‘ for๋ฌธ์„ ๋Œ๋ฆฌ๋ฉด์„œ ๋ชจ๋“  ์œ„์น˜์— ๋Œ€ํ•ด BFS๋ฅผ ๋Œ๋ ธ๋‹ค. BFS๋ฅผ ๋Œ๋ฆด ๋•Œ ๋งˆ๋‹ค ํ˜„์žฌ๊ฐ€ ๊ฐ€์žฅ ๊ธด ๊ฑฐ๋ฆฌ๋ผ๋ฉด ans๋ฅผ ๊ฐฑ์‹ ํ•˜์˜€๊ณ , ๋งˆ์ง€๋ง‰๊นŒ์ง€ BFSํƒ์ƒ‰์„ ๋ชจ๋‘ ๋งˆ์ณค๋‹ค๋ฉด ans๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

๋ฉ”๋ชจ๋ฆฌ ์‹œ๊ฐ„
2004 KB 84 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
#include<iostream>
#include<string.h>
#include<queue>
using namespace std;
#define F(x,y,u,p) for(int x = 0 ; x<u; x++)for(int y = 0; y<p; y++)
typedef pair<intint> p;
int dx[] = { 0,1,0,-1 }, dy[] = { 1,0,-1,0 };
int n, m, chk[55][55], ans;
char arr[55][55];
 
void bfs(int x, int y) {
    queue<p> q;
    q.push({ x, y });
    chk[x][y] = 0;
    while (!q.empty()) {
        int r = q.front().first, c = q.front().second;
        q.pop();
        for (int i = 0; i < 4; i++) {
            int nr = r + dx[i], nc = c + dy[i];
            if (nr < 0 || nr >= n || nc < 0 || nc >= m || chk[nr][nc] >= 0 || arr[nr][nc] == 'W'continue;
            chk[nr][nc] = chk[r][c] + 1;
            if (ans < chk[nr][nc]) ans = chk[nr][nc];
            q.push({ nr, nc });
        }
    }
}
int main() {
    scanf("%d %d"&n, &m);
    for (int i = 0; i < n; i++) {
        scanf("%s", arr[i]);
    }
    F(i, j, n, m) {
            if(arr[i][j] == 'L') bfs(i, j);
            memset(chk, -1sizeof(chk));
    }
    printf("%d", ans);
    return 0;
}
cs

 

๋Œ“๊ธ€