본문 바로가기
코딩테스트(알고리즘)/baekjoon

[baekjoon] 10709 기상캐스터

by Cafe Mocha 2023. 1. 23.

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

 

10709번: 기상캐스터

출력은 H 행으로, 각 행에는 공백으로 구분된 W 개의 정수를 출력한다. 출력의 i 번째 행 j 번째 정수 (1 ≦ i ≦ H, 1 ≦ j ≦ W) 는, 지금부터 몇 분후에 처음으로 구역 (i, j) 에 구름이 뜨는지를 표시

www.acmicpc.net


알고리즘 : dfs?

 

간단히 한 방향으로만 dfs

1. 완전탐색 => c를 발견하면 오른쪽으로만 dfs하면서 answer에 기록

 

/**
 * 제출용. 아래 로컬용을 지우고 제출하자.
 */
//  let input = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n")
/**
 * 로컬용, 예제.txt를 생성해서 예제를 복붙하자.
 */
let input = require("fs")
  .readFileSync("input.txt") //"/dev/stdin"
  .toString()
  .split("\n")
  .map((val) => val.trim());

  let [h,w]= input.shift().split(" ").map(v=>+v);
  
  let graph = input.map(v=>v.split(""));
  
  
  
  let answer = new Array(h).fill().map(v=>new Array(w).fill(-1));
  
  const dfs = (x,y)=>{
    answer[x][y]=0;
    count=1;
    while(1){
      let ny = y+count;
      if(ny>=w||graph[x][ny]==='c'||answer[x][ny]!==-1) return;
      answer[x][ny]=count;
      count++;
    } 
  }
  
  function solution() {
  // 구름은 1분 마다 오른쪽으로 이동 => 몇분이 걸리는지 표시, 방문하지 않으면 -1
  // 완전 탐색 => c가 발견되면 오른쪽으로만 이동시킨다.
  // answer에 기록

  for(let i=0;i<h;i++){
    for(let j=0;j<w;j++){
      if(graph[i][j]==='c'){
        dfs(i,j);
      }
    }
  }




  answer.map(v=>v.join(" ")).forEach(val=>console.log(val))
}

solution();