jiho_bae
Go devlog
jiho_bae
전체 방문자
오늘
어제
  • 분류 전체보기 (158)
    • JavaScript (38)
      • theory (34)
      • vanilla (4)
    • HTML & CSS (2)
    • Browser (3)
    • CS (6)
      • linux (1)
      • shell (2)
      • compiler (2)
    • DS & Algorithm (87)
      • theory (5)
      • basic (7)
      • programmers (30)
      • baekjoon (45)
    • Design Pattern (2)
    • Error (4)
    • Git & Github (4)
    • Tools (1)
    • 부트캠프 (4)
    • Small Tips (2)
    • Java (3)
    • test (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 계수정렬 자바스크립트
  • fetch 취소하기
  • javascript use strict
  • 프로그래머스 숫자카드나누기 javascript
  • 자바스크립트 비동기 마이크로 태스크 큐와 렌더링 과정
  • 병합정렬 자바스크립트
  • 억억단을 외우자 javascript
  • JavaScript
  • 자바스크립트 커링
  • 자바스크립트 모듈 시스템
  • 외벽 점검 javascript
  • 자바스크립트 배열의 특수함
  • 백준 17406 nodeJS
  • 자바스크립트 채팅방 스크롤
  • 자바스크립트 이벤트 위임
  • 대충만든자판 javascript
  • 카카오 코딩테스트 양궁대회 nodeJS
  • 깃 이전 커밋에서 새 브랜치 만들기
  • 덧칠하기 javascript
  • 리액트 프로젝트 디버깅하기
  • 리코쳇 로봇 javascript
  • 가사 검색 자바스크립트
  • 백준 자바스크립트 입력 템플릿
  • 퀵정렬 자바스크립트
  • safari invalid date error
  • 13460 javascript nodejs
  • safari Date format NaN
  • 자바스크립트 sort는 왜 그모양일까
  • 25632 소수 부르기 게임
  • 1753 최단경로 javascript

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
jiho_bae

Go devlog

[프로그래머스] 게임 맵 최단거리 - 자바스크립트
DS & Algorithm/programmers

[프로그래머스] 게임 맵 최단거리 - 자바스크립트

2021. 6. 18. 20:51

문제

 

코딩테스트 연습 - 게임 맵 최단거리

[[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] 11 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]] -1

programmers.co.kr

 

풀이

 

n x m 행렬에서 (1,1)에서 시작해서 (n,m)에 도달하는 최단경로를 출력한다.

(n,m)에 도달할 수 없다면 -1을 출력한다.

 

풀이 방법

최단경로를 구해야 하므로 BFS 유형의 문제이다.

 

현재 위치에서, 상하좌우 이동 가능 여부를 판단한다.

상하좌우가 벽(0)이거나, 행렬의 범위를 벗어났다면 이동할 수 없다.
이동할 수 있다면 이동할 좌표와 이동한 횟수를 큐에 넣는다.

 

FIFO를 따라 BFS 함수의 Queue에서 좌표 (x,y)가 (n, m)와 같다면 바로 BFS 함수를 종료하고 최단경로를 출력한다.
Queue에 원소가 존재하지 않을 때 까지 (x,y)가 (n, m)에 도달하지 못했다면 -1을 출력한다.

 

코드

function solution(maps) {
  const n = maps.length - 1;
  const m = maps[0].length - 1;

  let answer = -1;
  function bfs(sx, sy, scnt) {
    const queue = [];
    queue.push([sx, sy, scnt]);
    maps[sx][sy] = 0;
    const dx = [-1, 0, 1, 0];
    const dy = [0, 1, 0, -1];
    
    while (queue.length) {
      const [x, y, cnt] = queue.shift();
      if (x === n && y === m) {
        answer = cnt;
        return;
      }
      for (let i = 0; i < 4; i++) {
        let nx = x + dx[i];
        let ny = y + dy[i];
        if (nx < 0 || ny < 0 || nx > n || ny > m) continue;
        if (maps[nx][ny] === 1) {
          maps[nx][ny] = 0;
          queue.push([nx, ny, cnt + 1]);
        }
      }
    }
    return;
  }

  bfs(0, 0, 1);
  return answer;
}

 

저작자표시 (새창열림)

'DS & Algorithm > programmers' 카테고리의 다른 글

[프로그래머스] 소수 찾기 - 자바스크립트  (0) 2021.06.18
[프로그래머스] 괄호 변환 - 자바스크립트  (0) 2021.06.18
[프로그래머스] 땅따먹기 - 자바스크립트  (0) 2021.06.18
[프로그래머스] 다리를 지나는 트럭 - 자바스크립트  (0) 2021.04.19
[프로그래머스] 크레인 인형뽑기 게임 - 자바스크립트  (0) 2021.04.19
    'DS & Algorithm/programmers' 카테고리의 다른 글
    • [프로그래머스] 소수 찾기 - 자바스크립트
    • [프로그래머스] 괄호 변환 - 자바스크립트
    • [프로그래머스] 땅따먹기 - 자바스크립트
    • [프로그래머스] 다리를 지나는 트럭 - 자바스크립트
    jiho_bae
    jiho_bae
    하루에 한 걸음씩

    티스토리툴바