
출처: https://velog.io/@white0_0/Javascript-%EB%B0%B1%EC%A4%80-1743-%EC%9D%8C%EC%8B%9D%EB%AC%BC-%ED%94%BC%ED%95%98%EA%B8%B0
✅ 문제 설명

✅ 풀이 설명
- 반복문 -> graph에서 음식물을 만나면 dfs 함수 호출.
- 음식물 주변을 확인, 만약에 상하좌우에 음식물을 만나게 되면 조건문(graph범위 안에 있는지, 방문한적이 있는지 확인) 후 만족하면 result에 1 더하고 재귀(dfs 호출).
- 연결된 음식물이 더 이상 없을 때(dfs함수를 더 이상 호출하지 않게 될 때)까지의 result값 answer 배열에 push.
- 반복문이 끝나고 answer 배열에서의 최대값 반환
✅내 코드
const fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString();
input = input.split("\n");
const [N, M, K] = input[0].split(" ").map(Number);
const answer = [];
let newArr = [];
for (let i = 1; i <= K; i++) {
const arr = input[i].split(" ").map(Number);
newArr.push(arr);
}
const graph = Array.from({ length: N }, () => Array(M).fill(0));
const visited = Array.from({ length: N }, () => Array(M).fill(false));
const dx = [0, 0, 1, -1];
const dy = [1, -1, 0, 0];
let result = 1;
newArr.forEach(([y, x]) => {
graph[y - 1][x - 1] = 1;
});
function dfs(y, x) {
visited[y][x] = true;
for (let k = 0; k < 4; k++) {
let ny = y + dy[k];
let nx = x + dx[k];
if (
ny >= 0 &&
ny < N &&
nx >= 0 &&
nx < M &&
graph[ny][nx] === 1 &&
!visited[ny][nx]
) {
result += 1;
dfs(ny, nx);
}
}
}
for (let i = 0; i < N; i++) {
for (let j = 0; j < M; j++) {
if (graph[i][j] == 1) {
dfs(i, j);
answer.push(result);
result = 1;
}
}
}
console.log(Math.max(...answer));