[JS] 미로 탈출 명령어

2025. 1. 24. 23:21· 코딩 테스트/프로그래머스 코딩 테스트 연습
목차
  1. 문제
  2. 풀이
  3. 코드
728x90

문제

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

 

프로그래머스

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

programmers.co.kr

 

풀이

이 문제의 경우 2차원 배열을 이용해 한정된 횟수 안에 특정 지점까지의 도착 여부를 측정하는 문제이다.

 

이번 문제는 비슷한 유형의 문제들에서 추가된 조건들이 존재한다.

  1. 한정된 이동 회수
  2. 최단 이동
  3. 문자 기준 사전순 빠른 탈출 명령어

1 번의 경우는 문제에서 주어지는 k 값을 이용해 탐색 회수를 한정할 수 있다.

2 번과 3 번의 경우는 문자 기준으로 이동 방향의 정렬(down, left, right, up 순서)을 이용해 탐색 방향의 우선순위를 지정하고, 각 이동시 목표지점과의 멘허탄거리를 측정해 k값 보다 멀어진다면 탐색을 중단한다. 멘하탄 거리를 이용하는 부분을 처음에는 생각하지 못했지만, 해당 조건을 두지 않으면 모든 경우의 수를 탐색하기 때문에 시간초과가 발생한다....

코드

function solution(n, m, x, y, r, c, k) {
  let answer = "z".repeat(k);
  const dir = [
    [1, 0],
    [0, -1],
    [0, 1],
    [-1, 0],
  ];
  const st = ["d", "l", "r", "u"];
  let map = Array.from({ length: n + 1 }, () =>
    Array.from({ length: m + 1 }, () => "x")
  );
  const minMove = Math.abs(r - x) + Math.abs(c - y);

  if (minMove > k || (k - minMove) % 2 !== 0) return "impossible";
  map[x][y] = "S";
  map[r][c] = "E";

  const dfs = (my, mx, tempString, distance) => {
    if (tempString.length > k) return;
    if (distance > k) return;
    if (tempString.length === k) {
      if (map[my][mx] === "E" && answer > tempString) {
        answer = tempString;
        return;
      }
    }
    if (answer !== "z".repeat(k)) return;
    for (let i = 0; i < 4; i++) {
      const ny = my + dir[i][0];
      const nx = mx + dir[i][1];
      if (ny > 0 && ny <= n && nx > 0 && nx <= m) {
        const temp = tempString + st[i];
        dfs(
          ny,
          nx,
          temp,
          Math.abs(ny - r) + Math.abs(nx - c) + tempString.length + 1
        );
      }
    }
  };
  dfs(x, y, "", k);
  return answer !== "z".repeat(k) ? answer : "impossible";
}
728x90

'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글

[JS] 지게차와 크  (0) 2025.03.03
[JS] 서버 증설 횟수  (0) 2025.02.28
[JS] 광고 삽입  (1) 2025.01.23
[JS] 기둥과 보 설치  (1) 2025.01.21
[JS] 길 찾기 게임 2019 KAKAO BLIND RECRUITMENT  (0) 2025.01.10
  1. 문제
  2. 풀이
  3. 코드
'코딩 테스트/프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
  • [JS] 지게차와 크
  • [JS] 서버 증설 횟수
  • [JS] 광고 삽입
  • [JS] 기둥과 보 설치
58청춘
58청춘
할 수 있었는데, 해야했나, 했어만 했는데 라는 말을 하며 슬픔과 좌절감을 느끼지 않도록
250x250
58청춘
Just 두 It
58청춘
전체
오늘
어제
  • 분류 전체보기 (545) N
    • JavaScript (107) N
      • 모던 자바스크립트 Deep Dive (48)
      • You Don't know JS (44) N
      • Javascript (15)
    • TypeScript (8)
      • 이펙티브 타입스크립트 (3)
    • React (49)
      • 모던 리액트 Deep Dive (8)
      • 리액트 기초 (7)
    • 코딩 테스트 (285) N
      • 프로그래머스 코딩 테스트 연습 (208)
      • 백준 (65) N
      • 구름 Goorm (12)
    • 프로젝트 (2)
      • 북극팽귄 프로젝트 (9)
      • TYLEGG (2)
      • 가말다 - 마일스톤 (11)
      • INMATE 인천 맛집 소개 (11)
    • FE 이모저모 공부 (22)
    • CS (21)
      • 네트워크 (4)
    • MySQL (5)
    • 회고록 (2)
      • React 프리온보딩 (3)
      • 원티드 프리온보딩 프론트엔드 회고록 (0)
      • 가말다 회고록 (0)
    • 파이썬 (2)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록
  • 글쓰기

공지사항

인기 글

태그

  • BFS
  • cs
  • REACT
  • 완전탐색
  • FE개발자
  • typeScript
  • 시뮬레이션
  • node.js
  • 취준
  • 스택
  • 코테연습
  • JavaScript
  • 문자열
  • 코테준비
  • 코딩테스트
  • 구현
  • 취준생
  • dfs
  • 배열
  • Deep Dive
  • 알고리즘
  • 수학
  • 프로젝트
  • 프로그래머스
  • 카카오
  • dp
  • 가말다
  • 백준
  • 스코프
  • 정렬

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
58청춘
[JS] 미로 탈출 명령어
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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