✨ 문제 ✨

✨ 정답 ✨
const { count } = require("console");
const fs = require("fs");
const { nextTick } = require("process");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./예제.txt";
let input = fs.readFileSync(filePath).toString().trim();
input = input.split('\n')
const [N, M, K] = input.shift().split(' ').map((el) => +el)
let array = Array.from({ length: N + 1 }, () => new Array(M + 1).fill(0));
for (let i = 0; i < K; i++) {
let [A, B] = input[i].split(' ').map((el) => +el);
array[A][B] = 1;
}
let dx = [-1, 0, 1, 0]
let dy = [0, -1, 0, 1]
let visited = Array.from({ length: N + 1 }, () => new Array(M + 1).fill(false));
const solution = (x, y) => {
let queue = [[x, y]]
let count = 0;
while (queue.length) {
let [currentX, currentY] = queue.shift();
if (visited[currentX][currentY]===true){
continue;
}
visited[currentX][currentY] = true;
count += 1;
for (let i = 0; i < 4; i++) {
let nextX = currentX + dx[i]
let nextY = currentY + dy[i]
if (nextX > 0 && nextY > 0 && nextX <= N && nextY <= M
&& array[nextX][nextY] === 1
&& visited[nextX][nextY] === false) {
queue.push([nextX, nextY])
}
}
}
return count;
}
let answer = [];
for (let i = 1; i <= N; i++) {
for (let j = 1; j <= M; j++) {
if (array[i][j] === 1) {
answer.push(solution(i, j));
}
}
}
console.log(Math.max(...answer))
🧵 참고한 정답지 🧵
💡💡 기억해야 할 점 💡💡
- 처음에 풀 때는 그림의 개수(pCount)와 그림 넓이(aCounts)를 각각 구해서 두 개의 변수에 저장해야 한다고 생각했는데, 두 번째로 풀 때에는 그림 넓이 배열(pictureAreaArray)만 있으면 그림의 개수도 알 수 있으니 그림 개수를 세는 변수는 필요가 없다고 판단하여 변수를 하나만 사용하였다.
정보 감사합니다.