[프로그래머스] 무인도 여행 Lv2

2025. 2. 17. 20:10코딩 테스트 준비

728x90
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/154540

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

function solution(maps) {
  const result = [];
  const [R, C] = [maps.length, maps[0].length];
  const visited = Array.from({ length: R }, () => Array(C).fill(0));
  const move = [[0, 1], [0, -1], [1, 0], [-1, 0]];

  const bfs = (a, b) => {
    let cnt = 0;
    const q = [[a, b]];
    cnt += parseInt(maps[a][b]);
    visited[a][b] = 1;

    while (q.length) {
      const [r, c] = q.shift();
      for (let i = 0; i < 4; i++) {
        const nr = r + move[i][0];
        const nc = c + move[i][1];
        if (nr >= 0 && nc >= 0 && nr < R && nc < C && 
            !visited[nr][nc] && maps[nr][nc] !== "X") {
          visited[nr][nc] = 1;
          cnt += parseInt(maps[nr][nc]);
          q.push([nr, nc]);
        }
      }
    }
    result.push(cnt);
  };

  for (let i = 0; i < R; i++) {
    for (let j = 0; j < C; j++) {
      if (!visited[i][j] && maps[i][j] !== "X") bfs(i, j);
    }
  }

  if (result.length === 0) return [-1];

  return result.sort((a, b) => a - b);
}
728x90
반응형