< 문제 간단설명 >
문제에 있는 그림대로 공이 이동했을 경우 각 열마다의 공이 몇번째 열로 마지막에 나오는지 반환하는 문제이다. 만약 중간에 길이 막혀서 갇힌다면 -1을 반환한다.
/**
* @param {number[][]} grid
* @return {number[]}
*/
var findBall = function (grid) {
let [totalRow, totalCol] = [grid.length - 1, grid[0].length - 1];
let result = Array.from({ length: totalCol + 1 }, () => -1);
const DFS = (row, col) => {
let [prevRow, nextRow] = [row - 1, row + 1];
let [prevCol, nextCol] = [col - 1, col + 1];
let prev = grid[row][col - 1];
let cur = grid[row][col];
let next = grid[row][col + 1];
// 오른쪽 아래로 길이 나있는데, 오른쪽 열이 왼쪽 아래로 길이 나있어서 갇힌 경우
if (cur === 1 && next === -1) {
return -1;
}
// 왼쪽 아래로 길이 나있는데, 왼쪽 열이 오른쪽 아래로 길이 나있어서 갇힌 경우
if (cur === -1 && prev === 1) {
return -1;
}
// 오른쪽 아래로 길이 나있는데, 오른쪽이 벽일 경우
if (cur === 1 && nextCol > totalCol) {
return -1;
}
// 왼쪽 아래로 길이 나있는데, 왼쪽이 벽일 경우
if (cur === -1 && prevCol < 0) {
return -1;
}
// 마지막 열까지 도달했을 경우
if (row === totalRow) {
// 길이 오른쪽 아래로 나있을 경우
if (cur === 1) {
// 오른쪽으로 이동
return col + 1;
}
// 길이 왼쪽 아래로 나있을 경우
if (cur === -1) {
// 왼쪽으로 이동
return col - 1;
}
}
// 오른쪽 아래로 이동
if (cur === 1) {
return DFS(nextRow, nextCol);
}
// 왼쪽 아래로 이동
if (cur === -1) {
return DFS(nextRow, prevCol);
}
};
result = result.map((_, col) => {
return DFS(0, col);
});
return result;
};
'PS > LeetCode' 카테고리의 다른 글
LeetCode / Linked List / 148번 / Sort List / JS (0) | 2023.04.28 |
---|---|
LeetCode / Linked List / 328번 / Odd Even Linked List / JS (0) | 2023.04.28 |
LeetCode / Linked List / 234번 / Palindrome Linked List / JS (0) | 2023.04.19 |
LeetCode / Linked List / 19번 / Remove Nth Node From End of List / JS (0) | 2023.04.19 |