Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

문제:JavaScript에서 토마토가 썩는 데 걸리는 시간

<시간/>

문제

우리는 2차원 숫자 배열 arr을 유일한 인수로 취하는 JavaScript 함수를 작성해야 합니다.

배열의 숫자는 -

일 수 있습니다.
  • 빈 셀을 나타내는 값 0;

  • 신선한 토마토를 나타내는 값 1,

  • 썩은 토마토를 나타내는 값 2입니다.

1분마다 썩은 토마토에 인접한(4방향) 신선한 토마토는 썩게 됩니다.

우리의 함수는 세포에 신선한 토마토가 없을 때까지 경과해야 하는 최소 시간(분)을 반환해야 합니다. 이것이 불가능하면 대신 -1을 반환해야 합니다.

예를 들어, 함수에 대한 입력이 -

인 경우
const arr = [
   [2, 1, 1],
   [1, 1, 0],
   [0, 1, 1]
];

그러면 출력은 다음과 같아야 합니다. -

const output = 4;

출력 설명

경과 시간 토마토 상태
1
[
[2, 2, 1],
[2, 1, 0],
[0, 1, 1]
]
2
[
[2, 2, 2],
[2, 2, 0],
[0, 1, 1]
]
3
[
[2, 2, 2],
[2, 2, 0],
[0, 2, 1]
]
4
[
[2, 2, 2],
[2, 2, 0],
[0, 2, 2]
]

예시

이에 대한 코드는 -

const arr = [
   [2, 1, 1],
   [1, 1, 0],
   [0, 1, 1]
];
const timeToRot = (arr = []) => {
   let fresh = 0;
   let count = -1;
   let curr = [];
   for(let i = 0; i < arr.length; i++){
      for(let j = 0; j < arr[i].length; j++){
         if(arr[i][j] === 1){
            fresh += 1;
         };
         if(arr[i][j] === 2){
            curr.push([i, j]);
         };
      };
   };
   if(!fresh){
      return 0;
   };
   while(curr.length > 0){
      count += 1;
      const next = [];
      const rotten = (i, j) => {
         arr[i][j] = 2
         next.push([i, j])
         fresh -= 1
      };
      for(const [i, j] of curr){
         if (arr[i - 1] && arr[i - 1][j] === 1) {
            rotten(i - 1, j);
         };
         if (arr[i + 1] && arr[i + 1][j] === 1) {
            rotten(i + 1, j);
         };
         if (arr[i][j - 1] === 1) {
            rotten(i, j - 1);
         };
         if (arr[i][j + 1] === 1) {
            rotten(i, j + 1);
         };
      }
      curr = next
   };
   return fresh === 0 ? count : -1;
};
console.log(timeToRot(arr));

출력

콘솔의 출력은 -

4