[백준 1743번] BFS(너비 우선 탐색) - 음식물 피하기

김민지·2023년 7월 26일
0

냅다 시작 백준

목록 보기
64/118

✨ 문제 ✨

✨ 정답 ✨

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();


// const fs = require('fs'); 
// let input = fs.readFileSync("/dev/stdin").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))

🧵 참고한 정답지 🧵

💡💡 기억해야 할 점 💡💡

  1. 처음에 풀 때는 그림의 개수(pCount)와 그림 넓이(aCounts)를 각각 구해서 두 개의 변수에 저장해야 한다고 생각했는데, 두 번째로 풀 때에는 그림 넓이 배열(pictureAreaArray)만 있으면 그림의 개수도 알 수 있으니 그림 개수를 세는 변수는 필요가 없다고 판단하여 변수를 하나만 사용하였다.
profile
이건 대체 어떻게 만든 거지?

1개의 댓글

comment-user-thumbnail
2023년 7월 26일

정보 감사합니다.

답글 달기