2023년 01월 24일 화요일 - 날씨 실화냐?


오늘 올려볼 문제는 909번 Snakes and Ladders 이라는 문제이다.


사진을 클릭하면 해당 문제로 이동합니다.

leetcode 문제 사진

오늘도 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;
    }
}




제출 화면

leetcode 문제 맞았습니다


오늘은 날씨가 미친것 같다...

설날 아니었다면 내일 아침 9시 뉴스에 나왔을지도...


내일도 문제를 풀어서 블로그에 글을 쓸 수 있으면 좋겠다.

+ Recent posts