코딩테스트(알고리즘)/baekjoon
[baekjoon] 10709 기상캐스터
Cafe Mocha
2023. 1. 23. 14:21
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();