๐ 1. ๋ฌธ์ ์ค๋ช
๐ก 2. ์ ๊ทผ๋ฐฉ์
โ๏ธ ๋ฌธ์ ์์ฝ - ์ง๋ขฐ์ฐพ๊ธฐ ๊ฒ์
- board๋ n x n ํฌ๊ธฐ์ 2D ๋ฐฐ์ด์ด๋ค.
- ์ง๋ขฐ๊ฐ ์๋ ์์น๋ 1, ์๋ ์์น๋ 0์ด๋ค.
- ์ง๋ขฐ(1)๊ฐ ์๋ ๊ณณ์ ๊ธฐ์ค์ผ๋ก ์ฃผ๋ณ 8๋ฐฉํฅ + ์๊ธฐ ์์ ๊น์ง ์ํ์ง๋(1)๋ก ํ์ํด์ผ ํ๋ค.
- ์ต์ข ์ ์ผ๋ก ์์ ํ ์ง์ญ(0)์ ๊ฐ์๋ฅผ ๋ฐํํ๋ ๋ฌธ์ ์ด๋ค.
โ๏ธ ํ์ด ๋ฐฉ์
- ๋ฐฐ์ด bd[][] ์์ฑ → ๊ธฐ์กด board[][]์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ๋ค.
- board[][] ์์ ์ง๋ขฐ(1)๋ฅผ ์ฐพ์ผ๋ฉด ์ฃผ๋ณ 8๋ฐฉํฅ + ์๊ธฐ ์์ ์ 1๋ก ๋ณ๊ฒฝํ๋ค.
- ์ด ๋ ์ค์ํ ๊ฒ์ ๋ฐฐ์ด ๋ฒ์๋ฅผ ๋ฒ์ด๋์ง ์๋๋ก Math.min(), Math.max()๋ฅผ ์ฌ์ฉํด์ ์ธ๋ฑ์ค ์์น๋ฅผ ์กฐ์ ํ๋ค.
- ๋ชจ๋ ์ํ์ง๋๋ฅผ ํ์ํ ํ ๋จ์ 0์ ๊ฐ์๋ฅผ ์ธ์ด ๋ฐํํ๋ค.
๊ทธ๋ฆผ์ผ๋ก ํํํด ๋ณด์๋ค. ์ง๋ขฐ๊ฐ ์๋ ์์น ์ฆ, board[i][j] == 1์ด๋ผ๋ฉด ์ฃผ๋ณ 8์นธ์ ์๋์ ๊ฐ์ด ํํํ ์ ์๋ค. m์ minus๋ฅผ ๋ด ๊ฒ์ด๊ณ p๋ plus์ด๋ค. [im]์ [i-1], [ip]๋ [i+1], [jm]์ [j-1], [jp]๋ [j+1]์ด๋ค.
board[i][j] == 1 ์ด๋ผ๋ฉด ์ฃผ๋ณ 8์นธ์ ๋ชจ๋ 1๋ก ์ฑ์์ค๋ค.
์ด ๋ ์ค์ํ ๊ฒ์ ๋ฐฐ์ด ArrayIndexOutOfBoundsException ์๋ฌ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์ ์ธ๋ฑ์ค์ ์ ํ ๋ฒ์๋ฅผ ์ค์ ํด ์ฃผ์ด์ผ ํ๋ค.
๋ฐฐ์ด์์ ์ผ์ชฝ์ด๋ ์์ชฝ์ผ๋ก ๊ณ์ ์ด๋ํ๋ค ๋ณด๋ฉด ์ธ๋ฑ์ค๊ฐ 0๋ณด๋ค ์์์ง ์ ์๋ค. ์ด ๊ฒฝ์ฐ ๋ ํฐ ๊ฐ์ธ 0์ ๊ณ ๋ฅผ ์ ์๊ฒ Math.max(i - 1, 0)๊ณผ Math.max(j - 1, 0) ์ฒ๋ฆฌ๋ฅผ ํด ์ค๋ค.
๋ฐ๋๋ก ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ๊ฑฐ๋ ์๋๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ ๋ฐฐ์ด ๋ง์ง๋ง ์ธ๋ฑ์ค์ธ n-1๋ณด๋ค ์ธ๋ฑ์ค๊ฐ ์ปค์ง ์ ์๋ค. ๊ทธ ๋๋ ์ต์๊ฐ์ธ n-1์ ๊ณ ๋ฅผ ์ ์๋๋ก Math.min(i + 1, n -1)๊ณผ Math.min(j + 1, n - 1)์ ํ๋ค.
- Math.min(i + 1, n - 1) → ๋ฐฐ์ด ์๋(↓)๋ก ์ด๋ํ๋, ์ต๋ n-1๊น์ง๋ง ์ด๋
- Math.max(i - 1, 0) → ๋ฐฐ์ด ์(↑)๋ก ์ด๋ํ๋, ์ต์ 0๊น์ง๋ง ์ด๋
- Math.min(j + 1, n - 1) → ๋ฐฐ์ด ์ค๋ฅธ์ชฝ(→)์ผ๋ก ์ด๋ํ๋, ์ต๋ n-1๊น์ง๋ง ์ด๋
- Math.max(j - 1, 0) → ๋ฐฐ์ด ์ผ์ชฝ(←)์ผ๋ก ์ด๋ํ๋, ์ต์ 0๊น์ง๋ง ์ด๋
๋ณ์ | ์ด๋ ๋ฐฉํฅ | ๊ณ์ฐ์ |
ip | ์๋(↓) ์ด๋ | i + 1 (๋จ, ์ต๋ n-1) |
im | ์(↑) ์ด๋ | i - 1 (๋จ, ์ต์ 0) |
jp | ์ค๋ฅธ์ชฝ(→) ์ด๋ | j + 1 (๋จ, ์ต๋ n-1) |
jm | ์ผ์ชฝ(←) ์ด๋ | j - 1 (๋จ, ์ต์ 0) |
โญ 3. ์ ๋ต์ฝ๋
import java.util.*;
class Solution {
public int solution(int[][] board) {
int answer = 0;
int n = board.length;
int[][] bd = new int[n][n];
// 1. ์๋ณธ ๋ณด๋ ํ์ํ๊ธฐ
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (board[i][j] == 1) { // ์ง๋ขฐ ๋ฐ๊ฒฌ!
// ์ธ๋ฑ์ค๊ฐ ๋ฐฐ์ด ๋ฒ์ ๋์ง ์๊ฒ ์ฒ๋ฆฌ
int ip = Math.min(i + 1, n - 1);
int im = Math.max(i - 1, 0);
int jp = Math.min(j + 1, n - 1);
int jm = Math.max(j - 1, 0);
// 9์นธ ๋ชจ๋ 1๋ก ์ค์ (์๊ธฐ ์์ + 8๋ฐฉํฅ)
bd[i][j] = 1;
bd[i][jp] = 1;
bd[i][jm] = 1;
bd[ip][j] = 1;
bd[im][j] = 1;
bd[ip][jp] = 1;
bd[ip][jm] = 1;
bd[im][jp] = 1;
bd[im][jm] = 1;
}
}
}
// 2. ์์ ์ง๋(0) ๊ฐ์ ์ธ๊ธฐ
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (bd[i][j] == 0) answer++;
}
}
return answer;
}
}
๐ฆ 4. TMI
์ด๊ฒ lv 0 ๋ฌธ์ ๋ผ๋ ์๊ฐ๋ณด๋ค ์ฝ์ง ์๋ค.
'Algorithm > JAVAํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ํผ์ ๋๋ ๋จน๊ธฐ (1), (2), (3) (6) | 2025.03.10 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ์ต๋น๊ฐ ๊ตฌํ๊ธฐ (ํด์๋งต) (9) | 2025.03.06 |
[๋ฆฌํธ์ฝ๋] LeetCode Longest Common Prefix (Easy) in Java (23) | 2025.02.22 |
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ์นด๋๋ญ์น (ํ) (6) | 2025.02.20 |
[๋ฐฑ์ค] (Java) ์์ธํธ์ค ๋ฌธ์ (ํ) (7) | 2025.02.20 |