[백준알고리즘] 알고리즘 연습 - 7576

krkorklo·2022년 3월 4일
0

백준알고리즘

목록 보기
21/27

7576 - 토마토

https://www.acmicpc.net/problem/7576

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');

let [m, n] = input[0].split(" ").map((num) => Number(num));
let numbers = [];
for(let i=1; i<input.length; i++) {
    if(input[i] != '') {
        numbers.push(input[i].split(" ").map((num) => Number(num)));
    }
}

function answer(arr, n, m) {
    let visited = Array.from(Array(n), () => Array(m).fill(false));
    let queue = [];
    for(let i=0; i<n; i++) {
        for(let j=0; j<m; j++) { 
            if (arr[i][j] == -1) visited[i][j] = true;
            else if (arr[i][j] == 1) queue.push([i, j, 0]);
        }
    }
    let cnt = 0;
    let idx = 0;
    while(queue.length != idx) {
        let [x, y, day] = queue[idx++];
        if (visited[x][y]) continue;
        visited[x][y] = true;
        if (x != 0 && arr[x-1][y] == 0 && !visited[x-1][y]) queue.push([x-1,y, day+1]);
        if (y != 0 && arr[x][y-1] == 0 && !visited[x][y-1]) queue.push([x,y-1,day+1]);
        if (x != n-1 && arr[x+1][y] == 0 && !visited[x+1][y]) queue.push([x+1,y,day+1]);
        if (y != m-1 && arr[x][y+1] == 0 && !visited[x][y+1]) queue.push([x,y+1,day+1]);
        cnt = Math.max(cnt, day);
    }

    let ans = true;
    for(let i=0; i<n; i++) {
        if (visited[i].includes(false)) {
            ans = false;
            break;
        }
    }
    return ans ? cnt : -1;
}

console.log(answer(numbers, n, m));

ㅎㅎㅎㅎㅎㅎ처음에ㅎㅎㅎㅎㅎ
console.log(numbers, n, m)
해놓고 왜 자꾸 출력초과나냐고 화냈다.
ㅎㅎㅎㅎㅎ

이 문제는 아주 옛날에 이퍼 준비하면서 풀었던 거 같은데 넘 오래돼서.. 새로운 마음으로 풀었다.

0개의 댓글