Contents

μ•ˆμ „μ§€λŒ€ (with.Java)

   May 9, 2024     3 min read

β€œμ•ˆμ „μ§€λŒ€ (with.Java)” λ¬Έμ œμ— λŒ€ν•˜μ—¬ μ•Œμ•„λ³Έ κΈ€μž…λ‹ˆλ‹€.

μ½”λ”© ν…ŒμŠ€νŠΈ 문제λ₯Ό ν’€λ©°, ν’€μ—ˆλ˜ λ¬Έμ œμ— λŒ€ν•œ νšŒκ³ μ™€ λ‹€λ₯Έ 풀이 방법을 μ•Œμ•„λ³΄λ©°, μ•Œμ•„κ°€κ³ μž ν•©λ‹ˆλ‹€.

λ¬Έμ œμ— λŒ€ν•΄ λ¨Όμ € μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

문제

지뒰가 μžˆλŠ” 지역과 지뒰에 μΈμ ‘ν•œ μœ„, μ•„λž˜, 쒌, 우 λŒ€κ°μ„  칸을 λͺ¨λ‘ μœ„ν—˜μ§€μ—­μœΌλ‘œ λΆ„λ₯˜ν•©λ‹ˆλ‹€.

μ§€λ’°λŠ” 2차원 λ°°μ—΄ board에 1둜 ν‘œμ‹œλ˜μ–΄ 있고 boardμ—λŠ” 지뒰가 맀섀 된 지역 1κ³Ό, 지뒰가 μ—†λŠ” 지역 0만 μ‘΄μž¬ν•©λ‹ˆλ‹€.

지뒰가 λ§€μ„€λœ μ§€μ—­μ˜ 지도 boardκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, μ•ˆμ „ν•œ μ§€μ—­μ˜ μΉΈ 수λ₯Ό returnν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

μ œν•œμ‚¬ν•­

  • boardλŠ” n x n λ°°μ—΄μž…λ‹ˆλ‹€.
  • 1 ≀ n ≀ 100
  • μ§€λ’°λŠ” 1둜 ν‘œμ‹œλ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • boardμ—λŠ” 지뒰가 μžˆλŠ” 지역 1κ³Ό 지뒰가 μ—†λŠ” 지역 0만 μ‘΄μž¬ν•©λ‹ˆλ‹€.

μž…μΆœλ ₯ μ˜ˆμ‹œ

my_stringresult
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 0, 0]]16
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 1, 0], [0, 0, 0, 0, 0]]13
[[1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1]]0

λ¬Έμ œμ— λŒ€ν•œ λ‚˜μ˜ 풀이

class Solution {
    public int solution(int[][] board) {
        int[][] secondArr = new int[board.length+2][board.length+2];
        int answer = 0;
        for(int i = 0; i < board.length; i++){
            for(int j = 0; j < board.length; j++){
                if(board[i][j] == 1){
                    for(int a = i; a <= i+2; a++){
                        for(int b = j; b <= j+2; b++){
                            if(secondArr[a][b] != 1){
                                secondArr[a][b] = 1;
                            }
                        }
                    }
                }
            }
        }
        for(int i = 1; i < secondArr.length - 1; i++){
            for(int j = 1; j < secondArr.length-1; j++){
                if(secondArr[i][j] == 0){
                    answer++;
                }
            }
        }
        return answer;
    }
}

풀이 μ„€λͺ…

  • μƒˆλ‘œμš΄ 2차원 λ°°μ—΄ 생성: 기쑴의 λ³΄λ“œ 배열보닀 크기가 1μ”© 큰 μƒˆλ‘œμš΄ 2차원 λ°°μ—΄ secondArrλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. μ΄λŠ” λ³΄λ“œμ˜ 경계 뢀뢄을 μ²˜λ¦¬ν•˜κΈ° μœ„ν•¨μž…λ‹ˆλ‹€.
  • λ³΄λ“œ 탐색 및 μ£Όλ³€ μ…€ κ°±μ‹ : 기쑴의 λ³΄λ“œλ₯Ό νƒμƒ‰ν•˜λ©΄μ„œ 값이 1인 셀을 찾으면, ν•΄λ‹Ή 셀을 μ€‘μ‹¬μœΌλ‘œ μ£Όλ³€ 8개의 셀을 λͺ¨λ‘ 2둜 κ°±μ‹ ν•©λ‹ˆλ‹€.
  • μƒˆλ‘œμš΄ λ°°μ—΄ 탐색 및 0인 μ…€ 개수 μ„ΈκΈ°: μƒˆλ‘œμš΄ 배열을 νƒμƒ‰ν•˜λ©΄μ„œ 값이 0인 μ…€μ˜ 개수λ₯Ό μ„Έμ–΄ answer λ³€μˆ˜μ— μ €μž₯ν•©λ‹ˆλ‹€.
  • κ²°κ³Ό λ°˜ν™˜: μ΅œμ’…μ μœΌλ‘œ 세어진 0인 μ…€μ˜ 개수λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

μ½”λ“œ μž₯단점

  • μž₯점: 0인 μ…€μ˜ 개수λ₯Ό 효율적으둜 μ„ΈλŠ” 방법을 μ‚¬μš©ν•˜μ—¬ μ½”λ“œκ°€ κ°„κ²°ν•©λ‹ˆλ‹€. λ³΄λ“œμ˜ 경계 뢀뢄을 좔가적인 처리 없이 μ‰½κ²Œ λ‹€λ£° 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 단점: 이 μ½”λ“œλŠ” λ³΄λ“œμ˜ λͺ¨λ“  셀을 ν•œ λ²ˆμ”© 더 νƒμƒ‰ν•˜μ—¬ μ²˜λ¦¬ν•˜λ―€λ‘œ μ‹€ν–‰ μ‹œκ°„μ΄ λΉ„νš¨μœ¨μ μΌ 수 μžˆμŠ΅λ‹ˆλ‹€. 특히 λ³΄λ“œμ˜ 크기가 클 κ²½μš°μ—λŠ” μ„±λŠ₯에 영ν–₯을 쀄 수 μžˆμŠ΅λ‹ˆλ‹€.