반응형
1167번(https://hevton.tistory.com/438) 처럼
트리의 지름 방식으로 문제를 풀어야 한다고 생각했다.
근데, 주어진 조건에서는 트리가 아닐 수도 있기 때문에... 예외가 있다고 한다.
그래서, 모든 경우를 다 해주는 방식을 사용했다.
그럼 O(N^3) 정도 나올텐데, N이 50이기 때문에 시간초과 걱정은 하지 않아도 된다.
#include <iostream>
#include <queue>
#include <vector>
#include <cstring>
using namespace std;
int N, M;
char MAP[50][50];
bool VISIT[50][50];
int DEPTH[50][50];
int MAX_DEPTH;
int mx[4] = {0, 0, 1, -1};
int my[4] = {1, -1, 0, 0};
void bfs(int x, int y) {
queue<pair<int, int>> que;
que.push({x, y});
VISIT[x][y] = true;
while(!que.empty()) {
int x = que.front().first;
int y = que.front().second;
que.pop();
for(int i = 0; i < 4; i++) {
int tx = x + mx[i];
int ty = y + my[i];
if(tx < 0 || tx >= N || ty < 0 || ty >= M)
continue;
if(!VISIT[tx][ty] && MAP[tx][ty] == 'L') {
que.push({tx, ty});
DEPTH[tx][ty] = DEPTH[x][y] + 1;
VISIT[tx][ty] = true;
if(MAX_DEPTH < DEPTH[tx][ty])
MAX_DEPTH = DEPTH[tx][ty];
}
}
}
}
int main() {
cin >> N >> M;
for(int i = 0; i < N; i++) {
for(int j = 0; j < M; j++)
cin >> MAP[i][j];
}
for(int i = 0; i < N; i++) {
for(int j = 0; j < M; j++) {
if(!VISIT[i][j] && MAP[i][j] == 'L') {
bfs(i, j);
memset(VISIT, 0, sizeof(VISIT));
memset(DEPTH, 0, sizeof(DEPTH));
}
}
}
cout << MAX_DEPTH << "\n";
}
소요 시간 : 45분
반응형
'[백준]' 카테고리의 다른 글
[BaekJoon/백준 15686번 치킨 배달 (0) | 2022.07.12 |
---|---|
[BaekJoon/백준] 3967번 매직 스타 (0) | 2022.07.11 |
[BaekJoon/백준] 7569번 토마토 (0) | 2022.07.09 |
[BaekJoon/백준] 9205번 맥주 마시면서 걸어가기 (0) | 2022.07.08 |
[BaekJoon/백준] 1986번 체스 (0) | 2022.07.08 |