2023년 01월 24일 화요일 - 날씨 실화냐?
오늘 올려볼 문제는 909번 Snakes and Ladders 이라는 문제이다.
사진을 클릭하면 해당 문제로 이동합니다.
오늘도 LeetCode 사이트 오늘의 문제를 가지고 왔다.
생각보다 어려웠던 구현문제..
입력
사진에서도 볼 수 있듯이 2차원 int 배열 1개가 입력으로 들어온다.
풀이 및 코드
1번부터 시작해서 6까지 있는 주사위를 던져서 맨끝까지 가는 게임이라고 한다.
뱀 또는 사다리가 시작하는 칸에 멈추게 되면 바로 이어져있는 곳으로 이동하게된다고 했을 때 끝가지 갈 수 있다면 가장 적은 횟수를, 갈 수 없다면 -1을 리턴하는 문제이다.
오늘은 처음부터 정답을 생각해냈다.
일단 판이 그지같으니깐 1차원 배열로 펴준다.
이 후 bfs를 사용하여 문제를 풀었다.
이제 코드를 봐보자!
풀이코드
class Solution {
public int snakesAndLadders(int[][] board) {
int n = board.length, index = 1;
var arr = new int[n * n + 1];
var v = new boolean[n * n + 1];
var flag = true;
for(int i = n - 1; i >= 0; i--) {
if(flag) for(int j = 0; j < n; j++) arr[index++] = board[i][j];
else for(int j = n - 1; j >= 0; j--) arr[index++] = board[i][j];
flag = !flag;
}
int steps = 0;
var q = new LinkedList<Integer>();
q.add(arr[1] == -1 ? 1 : arr[1]);
while(!q.isEmpty()) {
int size = q.size();
for(int i = 0; i < size; i++) {
int now = q.poll();
if(v[now]) continue;
v[now] = true;
if(now == n * n) return steps;
for(int j = now + 1; j <= Math.min(now + 6, n * n); j++) q.add(arr[j] == -1 ? j : arr[j]);
}
steps++;
}
return -1;
}
}
제출 화면
오늘은 날씨가 미친것 같다...
설날 아니었다면 내일 아침 9시 뉴스에 나왔을지도...
내일도 문제를 풀어서 블로그에 글을 쓸 수 있으면 좋겠다.
'LeetCode 문제 풀이' 카테고리의 다른 글
[LeetCode] 472번 Concatenated Words 문제를 풀어보았다. (ft. java) (0) | 2023.01.27 |
---|---|
[LeetCode] 787번 Cheapest Flights Within K Stops 문제를 풀어보았다. (ft. java) (0) | 2023.01.26 |
[LeetCode] 997번 Find the Town Judge 문제를 풀어보았다. (ft. java) (0) | 2023.01.23 |
[LeetCode] 93번 Restore IP Addresses 문제를 풀어보았다. (ft. java) (2) | 2023.01.21 |
[LeetCode] 491번 Non-decreasing Subsequences 문제를 풀어보았다. (ft. java) (0) | 2023.01.20 |