반응형
문제 출처
https://www.acmicpc.net/problem/2589
정답 풀이
최단 거리 ? bfs 알고리즘을 사용하면 된다.
시작점이 어디냐에 따라 최단 거리가 달라지니까,
for 이중 반복문을 통해 모든 L을 시작점으로 둔다.
그리고 bfs로 최대로 먼 곳을 갱신해준다.
정답 코드
//상하좌우, 육지로 이동
//한 칸 이동 - 한 시간 걸림
//보물 : 최단 거리 이동하는데 , 가장 긴 시간이 걸리는 육지 두곳에 묻혀있음.
//bfs 알고리즘 사용
//어디서 시작하냐도 중요해서 전체 L 들어가야함
//bfs로 탐색 후 그때의 max 값 구하기
let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const [n,m] = input.shift().split(' ').map(v => +v);
let graph = input.map(row => row.split(''))
const dx = [-1,1,0,0];
const dy = [0,0,-1,1];
let max = 0
for(let i=0; i<n; i++){
for(let j=0; j<m; j++){
if(graph[i][j] === 'L'){
bfs(i,j)
}
}
}
function bfs(x,y){
const visited = Array.from({length: n}, () => new Array(m).fill(false));
visited[x][y] = true;
const queue = [[x,y,0]]
while(queue.length){
let [cx, cy, time] = queue.shift()
max = Math.max(max, time)
for(let d = 0; d<4; d++){
let nx = cx + dx[d];
let ny = cy + dy[d];
if(nx < 0 || ny < 0 || nx >= n || ny >= m || visited[nx][ny]) continue;
if(graph[nx][ny] === 'W') continue;
visited[nx][ny] = true;
queue.push([nx, ny, time+1])
}
}
}
console.log(max)
반응형
'알고리즘 문제 풀기' 카테고리의 다른 글
백준 1461 : 도서관 - javascript(그리디) (0) | 2024.10.17 |
---|---|
백준 14500: 테트로미노 - javascript (완탐, dfs) (0) | 2024.10.15 |
백준 16724 : 피리 부는 사나이 - javascript(dfs) (0) | 2024.10.13 |
백준 10159 : 저울 - javascript(dfs) (0) | 2024.10.12 |
백준 20058 : 마법사 상어와 파이어스톰 - javascript(dfs) (0) | 2024.10.10 |