알고리즘

[프로그래머스] 게임 맵 최단거리 JavaScript

2022. 8. 26. 00:12

문제 링크

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 유형

DFS/ BFS

 

문제 풀이

 

해당 문제는 상대 팀 진영에 도착하기 위해 지나가야 하는 칸의 최소 개수 즉, 최단 거리를 구하는 문제이다. 최단 거리를 구할 때는 DFS 보다 BFS가 유리하다. DFS는 도착점으로 가기 위한 모든 경로를 탐색해야 하지만 BFS는 타겟에 도착한 순간 종료할 수 있기 때문이다.

큐에는 출발점과 칸의 최소 개수를 넣는다. 큐에서 요소를 하나씩 꺼내고 현재 지점이 상대 팀 진영인 매트릭스의 가장 오른쪽 아래라면 칸의 개수를 리턴한다. 그렇지 않으면 현재 지점의 아래, 오른쪽, 위, 왼쪽으로 한칸 새로 이동한 지점을 확인한다. 새로 이동한 지점이 게임 맵을 벗어난 곳이거나 벽인 경우 큐에 넣지 않는다. 새로 이동한 지점이 갈 수 있는 곳이라면 해당 지점을 다시 지나갈 수 없도록 벽으로 만들고, 큐에 넣는다.

 

코드

function solution(maps) {
    const directions = [[1, 0], [0, 1], [-1, 0], [0, -1]];
    const n = maps.length - 1, m = maps[0].length - 1;
    
    const queue = [[0, 0, 1]];
    
    while (queue.length) {
        const [r, l, count] = queue.shift();
        if (r === n && l === m) return count;
        
        for (let direction of directions) {
            const nr = r + direction[0], nl = l + direction[1];
            // 게임 맵을 벗어난 경우
            if (nr < 0 || nr > n || nl < 0 || nl > m) continue;
            // 벽인 경우
            if (!maps[nr][nl]) continue;
            maps[nr][nl] = 0; // 이미 지나간 길을 지나갈 수 없도록 벽으로 만듬
            queue.push([nr, nl, count + 1]);
        }
    }
    return -1;
}

 

 

 

 

 

'알고리즘' 카테고리의 다른 글

[프로그래머스] 숫자 짝꿍 JavaScript  (0) 2022.10.08
[프로그래머스] 두 큐 합 같게 만들기 JavaScript  (1) 2022.09.26
[프로그래머스] 타겟 넘버 JavaScript  (0) 2022.08.23
[LeetCode] 841 Keys and Rooms JavaScript  (0) 2022.08.22
[LeetCode] 543 Diameter of Binary Tree JavaScript  (0) 2022.08.21
'알고리즘' 카테고리의 다른 글
  • [프로그래머스] 숫자 짝꿍 JavaScript
  • [프로그래머스] 두 큐 합 같게 만들기 JavaScript
  • [프로그래머스] 타겟 넘버 JavaScript
  • [LeetCode] 841 Keys and Rooms JavaScript
sandwe
sandwe
sandwe
sandwe
sandwe
전체
오늘
어제
  • 분류 전체보기 (69)
    • CSS (1)
    • 알고리즘 (35)
    • JavaScript (30)
      • 모던 자바스크립트 Deep Dive (30)
    • React (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 선언적
  • 다이나믹 프로그래밍
  • dfs
  • BFS
  • string
  • javascript
  • 렌더링 과정
  • 백준
  • 이터러블
  • 해시 테이블
  • Subsets
  • 알고리즘
  • 백트래킹
  • Suspense
  • Leetcode
  • float
  • 투 포인터
  • 해쉬 맵
  • 클로저
  • 프로토타입
  • 스프레드 문법
  • React Query
  • 스택
  • 이진 탐색
  • 정렬
  • map
  • 표준 빌트인 객체
  • 프로그래머스
  • Error Boundary
  • 구조 분해 할당

최근 댓글

최근 글

hELLO · Designed By 정상우.
sandwe
[프로그래머스] 게임 맵 최단거리 JavaScript
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.