일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 밥먹고
- 눈알빠지겠네
- javascript
- 코테
- 코딩테스트
- 송리단
- 발더스모드
- 나쫌
- 버즈2프로
- 맛집
- 잠실새내
- 미앤아이
- DIY
- 알고리즘테스트
- 토이프로젝트
- 뜨아거
- 3d퍼즐
- 천등
- 메탈퍼즐
- 누룽지소금빵
- 서울제빵소
- 발더스게이트
- 게임
- 노노그램
- LeetCode
- 하스스톤
- 바질토마토뭐시기
- 발더스3
- 취미
- 메일우유
- Today
- Total
.Zzumbong
[leetCode/JS] 1926. Nearest Exit from Entrance in Maz 본문
문제 설명
You are given an m x n
matrix maze
(0-indexed) with empty cells (represented as '.'
) and walls (represented as '+'
). You are also given the entrance
of the maze, where entrance = [entrancerow, entrancecol]
denotes the row and column of the cell you are initially standing at.
In one step, you can move one cell up, down, left, or right. You cannot step into a cell with a wall, and you cannot step outside the maze. Your goal is to find the nearest exit from the entrance
. An exit is defined as an empty cell that is at the border of the maze
. The entrance
does not count as an exit.
Return the number of steps in the shortest path from the entrance
to the nearest exit, or -1
if no such path exists.
입출력 예
Example 1:
Input: maze = [["+","+",".","+"],[".",".",".","+"],["+","+","+","."]], entrance = [1,2]
Output: 1
Explanation: There are 3 exits in this maze at [1,0], [0,2], and [2,3].
Initially, you are at the entrance cell [1,2].
- You can reach [1,0] by moving 2 steps left.
- You can reach [0,2] by moving 1 step up.
- It is impossible to reach [2,3] from the entrance.
- Thus, the nearest exit is [0,2], which is 1 step away.
Example 2:
Input: maze = [["+","+","+"],[".",".","."],["+","+","+"]], entrance = [1,0]
Output: 2
Explanation: There is 1 exit in this maze at [1,2].
[1,0] does not count as an exit since it is the entrance cell.
Initially, you are at the entrance cell [1,0].
- You can reach [1,2] by moving 2 steps right.
- Thus, the nearest exit is [1,2], which is 2 steps away.
Example 3:
Input: maze = [[".","+"]], entrance = [0,0]
Output: -1
Explanation: There are no exits in this maze.
Constraints
maze.length == m
maze[i].length == n
1 <= m, n <= 100
maze[i][j]
is either'.'
or'+'
.entrance.length == 2
0 <= entrancerow < m
0 <= entrancecol < n
entrance
will always be an empty cell.
내 솔루션
- 오우 쒯..
- 미로 찾기 문제다. 여러 조건이 있는데, 시작 지점은 출구가 아니다.
- 가로 세로 한칸씩 움직일 수 있고, 대각선으로는 움직일 수 없다.
- 출구가 없으면
-1
을 돌려준다. - BFS로 해결했고,
maze[2]
에다가 step level을 입력해주었다. - 지나갈 때마다
'+'
로 바꿔서 다시 돌아가지 못하게visited
역할을 했다.
var permute = function(nums) {
var nearestExit = function(maze, entrance) {
const queue = [[...entrance, 0]];
const DIR = [[1,0], [-1,0], [0,1], [0,-1]]
maze[entrance[0]][entrance[1]] = '+';
while(queue.length) {
const [curY, curX, level] = queue.shift();
if((curY === 0 || curY === maze.length - 1 || curX === 0 || curX === maze[0].length - 1) && !(curY === entrance[0] && curX === entrance[1])){
return level;
}
for(const [y, x] of DIR) {
const posY = y + curY;
const posX = x + curX;
if(maze[posY]?.[posX] === '.'){
maze[posY][posX] = '+';
queue.push([posY, posX, level+1])
}
}
}
return -1;
};
감상평
- BFS로 하는 미로 찾기! 재미있었다.
- 원리를 알고 있어서 머릿속으로는 쉬운데 막상 코딩하면 시간이 걸린다.
- leetCode는
console.log()
를 지원해서 중간 중간 디버깅을 할 수 있는데, - 코딩테스트 플랫폼 중에는
console.log()
가 막혀 있는 놈들이 있어서 눈으로 손으로 디버깅을 해야하는 점 때문에console.log()
디버깅 습관을 고쳐야 하나 싶다. - 근데 어떤 개발자가
log
안찍고 개발하냐? 뇌가 v8이냐? 왜 막아두는거요! - 그리고 틀렸으면 어느 문제가 틀렸는지 안알려주는 플랫폼도 있다. 너넨 QA팀에서 그냥 안되던데요? 하더냐
'coding test > leetCode' 카테고리의 다른 글
[leetCode/JS] 14. Longest Common Prefix (0) | 2022.11.24 |
---|---|
[leetCode/JS] 14. Longest Common Prefix (0) | 2022.11.24 |
[leetCode/JS] 46. Permutations (0) | 2022.11.24 |
[leetCode/JS] 13. Roman to Integer (0) | 2022.11.24 |
[leetCode/JS] 5. Longest Palindromic Substring (0) | 2022.11.24 |