우규이인우윀
Eager To Learn 🌌
우규이인우윀
전체 방문자
였늘
μ–΄μ œ

λΈ”λ‘œκ·Έ 메뉴

  • 🏑 ν™ˆ
  • πŸš€ κΉƒν—ˆλΈŒ
  • β›… νƒœκ·Έ ν΄λΌμš°λ“œ
  • λΆ„λ₯˜ 전체보기 (217)
    • πŸ‘¨πŸ»‍πŸ’» PS (170)
      • JAVA (82)
      • MYSQL (1)
      • Docker (2)
      • PYTHON (24)
      • LeetCode 150 (39)
      • Algorithm 기법 (1)
      • 바킹독 (21)
    • λΈ”λ‘œκ·Έ 이사 (0)
    • Error (1)
    • CS (15)
      • DataBase (2)
      • OS (7)
      • Network (1)
      • Spring (1)
      • 자료ꡬ쑰 (3)
      • Java (1)
    • Learned (7)
      • Spring (7)
    • κ°œλ°œμ„œμ  (15)
      • 가상 λ©΄μ ‘ μ‚¬λ‘€λ‘œ λ°°μš°λŠ” λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ 섀계 기초 (1)
      • 였브젝트 - 쑰영호 (7)
      • μΉœμ ˆν•œ SQL νŠœλ‹ (7)
    • 회고 (2)
hELLO Β· Designed By μ •μƒμš°.
우규이인우윀

Eager To Learn 🌌

πŸ‘¨πŸ»‍πŸ’» PS/LeetCode 150

[Java] 909. Snakes and Ladders

2023. 9. 15. 09:07

문제 νŒŒμ•…

 

 

Boustrophedon μŠ€νƒ€μΌμ˜ n*n λ³΄λ“œκ°€ μ£Όμ–΄μ§„λ‹€. ( (n-1,0) μ’Œν‘œμ—μ„œ μ‹œμž‘ν•œλ‹€. )

 

μ£Όμ‚¬μœ„μ— 따라 μ΅œλŒ€ 6칸을 이동할 수 μžˆλ‹€.

 

λ§Œμ•½ λ±€μ΄λ‚˜ 사닀리λ₯Ό λ§Œλ‚˜λ©΄ λ±€μ΄λ‚˜ 사닀리λ₯Ό μ΄μš©ν•΄μ•Όν•œλ‹€.

 

n^2 칸에 λ„λ‹¬ν–ˆμ„ λ•Œ, κ²Œμž„μ€ λλ‚œλ‹€.

 

λ³΄λ“œ 값이 -1이 μ•„λ‹Œ 경우 λ±€μ΄λ‚˜ 사닀리가 μ‘΄μž¬ν•œλ‹€.

 

λ±€μ΄λ‚˜ 사닀리인 경우 λ„μ°©ν•˜λŠ” λ³΄λ“œ 값이 κΈ°λ‘λ˜μ–΄μžˆλ‹€.

 

λ±€μ΄λ‚˜ μ‚¬λ‹€λ¦¬λŠ” 1 λ˜λŠ” n^2 칸에 μ‘΄μž¬ν•˜μ§€ μ•Šκ³  μ—°μ†μœΌλ‘œ 이동할 수 μ—†λ‹€.

 

n^2에 λ„λ‹¬ν•˜κΈ° μœ„ν•œ μ΅œμ†Œ 이동 횟수λ₯Ό λ°˜ν™˜ν•˜κ³ , λ„λ‹¬ν•˜μ§€ λͺ»ν•˜λ©΄ -1을 λ°˜ν™˜ν•œλ‹€.

 

 

풀이

1️⃣ 1차원 λ§΅κ³Ό bfs λ₯Ό μ΄μš©ν•œ 방법

πŸ’‘ λ– μ˜€λ₯Έ Idea

λ¨Όμ €, λ³΄λ“œνŒ μˆœμ„œκ°€ ν—·κ°ˆλ €μ„œ 이λ₯Ό 1차원 맡으둜 λ°”κΏ”μ„œ ν•΄κ²°ν•˜λ©΄ 간단할것이라 생각이 λ“€μ—ˆλ‹€.

λ”°λΌμ„œ, 제일 μ•„λž˜ ν–‰λΆ€ν„° μ‹œμž‘ν•΄μ„œ 맡을 1μ°¨μ›μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 과정을 거쳐야겠닀고 μƒκ°ν–ˆλ‹€.

그리고 λ‚˜μ„œ, bfsλ₯Ό μ΄μš©ν•΄μ„œ 사닀리에 탄 κ²½μš°λŠ” 사닀리 λͺ©μ μ§€λ‘œ μ΄λ™μ‹œν‚¨ μœ„μΉ˜λ₯Ό 큐에 λ„£μ–΄μ£Όκ³  μ•„λ‹Œ κ²½μš°λŠ” μ£Όμ‚¬μœ„λ₯Ό κ΅΄λ¦° 횟수λ₯Ό λ”ν•œ 값을 큐에 λ„£μ–΄μ£Όμ—ˆλ‹€.

그리고 λ°©λ¬Έν–ˆλ˜ 칸을 μ²΄ν¬ν•΄μ£Όλ©΄μ„œ μ€‘λ³΅μœΌλ‘œ μ§€λ‚˜κ°€μ§€ μ•Šλ„λ‘ κ΅¬ν˜„ν•˜μ˜€λ‹€.

 

 

class Solution {
    int N;
    int[] map;

    public int snakesAndLadders(int[][] board) {
        N = board.length;
        int end = N * N, result = 0;
        map = new int[end];
        getMap(board);
        boolean[] checked = new boolean[end];

        Queue<int[]> q = new LinkedList<>();

        q.add(new int[]{0, 0});
        checked[0] = true;
        
        while (!q.isEmpty()) {
            int[] info = q.poll();
            int idx = info[0], cnt = info[1];

            for (int i = 1; i <= 6; i++) {
                int next = idx + i;
                if (next >= end - 1) {
                    return cnt + 1;
                } else {
                    if (map[next] != -1) {

                        if (map[next] == end - 1) {
                            return cnt + 1;
                        }
                        if (!checked[map[next]]) {
                            q.offer(new int[]{map[next], cnt + 1});
                            checked[map[next]] = true;
                        }

                    } else {
                        if (!checked[next]) {
                            q.offer(new int[]{next, cnt + 1});
                            checked[next] = true;
                        }
                    }
                }
            }
        }
        return -1;
    }

    private void getMap(int[][] board) {
        boolean flag = true;

        int idx = 0;

        for (int r = N - 1; r >= 0; r--) {
            if (flag) {
                for (int c = 0; c <= N - 1; c++) {
                    map[idx++] = board[r][c] == -1 ? -1 : board[r][c] - 1;
                    flag = false;
                }
            } else {
                for (int c = N - 1; c >= 0; c--) {
                    map[idx++] = board[r][c] == -1 ? -1 : board[r][c] - 1;
                    flag = true;
                }
            }
        }

    }

}

 

κ²°κ³Ό

 

 

πŸ“– 회고

 

λ¬Έμ œκ°€ λ„ˆλ¬΄ ν•΄μ„ν•˜κΈ° μ–΄λ €μ›Œμ„œ, ν•œμ°Έμ„ κ³ λ―Όν–ˆλ˜ 것 κ°™λ‹€.

 

μ²˜μŒμ—λŠ” 문제λ₯Ό λ„ˆλ¬΄ λ³΅μž‘ν•˜κ²Œ μƒκ°ν•΄μ„œ μ „ν˜€ 풀리지 μ•Šμ•„ ν¬κΈ°ν• κΉŒλ„ μƒκ°ν–ˆλ˜ λ¬Έμ œμ΄λ‹€...

 

κ²°κ΅­μ—λŠ” λ³΄λ“œνŒμ„ μ΄ν•΄ν•˜κΈ° μ‰¬μš΄ λ°©λ²•μœΌλ‘œ λ³€ν™˜ν•˜κ³  λ¬Έμ œκ°€ μš”κ΅¬ν•˜λŠ” 사항과 bfsλ₯Ό μ œλŒ€λ‘œ κ΅¬ν˜„ν–ˆλ”λ‹ˆ ν•΄κ²°ν•  수 μžˆμ—ˆλ‹€.

 

    'πŸ‘¨πŸ»‍πŸ’» PS/LeetCode 150' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [Java] 133. Clone Graph
    • [Java] 373. Find K Pairs with Smallest Sums
    • [Java] 215. Kth Largest Element in an Array
    • [Java] 212. Word Search II
    우규이인우윀
    우규이인우윀
    개발자 κΏˆλ‚˜λ¬΄

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”