โค๏ธ Problem
- ๋ฌธ์
๋ค์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ง๋ขฐ๊ฐ ์๋ ์ง์ญ๊ณผ ์ง๋ขฐ์ ์ธ์ ํ ์, ์๋, ์ข, ์ฐ ๋๊ฐ์ ์นธ์ ๋ชจ๋ ์ํ์ง์ญ์ผ๋ก ๋ถ๋ฅํฉ๋๋ค.
์ง๋ขฐ๊ฐ ๋งค์ค๋ ์ง์ญ์ ์ง๋ board๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์์ ํ ์ง์ญ์ ์นธ ์๋ฅผ returnํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
- ์ ํ ์ฌํญ
- board๋ n * n ๋ฐฐ์ด์ ๋๋ค.
- 1 ≤ n ≤ 100
- ์ง๋ขฐ๋ 1๋ก ํ์๋์ด ์์ต๋๋ค.
- board์๋ ์ง๋ขฐ๊ฐ ์๋ ์ง์ญ 1๊ณผ ์ง๋ขฐ๊ฐ ์๋ ์ง์ญ 0๋ง ์กด์ฌํฉ๋๋ค.
- ์ ์ถ๋ ฅ ์ & ์ค๋ช
no | board | result |
1 | [[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 |
2 | [[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]] | 16 |
3 | [[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]] | 16 |
- (3, 2)์ ์ง๋ขฐ๊ฐ ์์ผ๋ฏ๋ก ์ง๋ขฐ๊ฐ ์๋ ์ง์ญ๊ณผ ์ง๋ขฐ์ ์ธ์ ํ ์, ์๋, ์ข, ์ฐ, ๋๊ฐ์ ์ด 8์นธ์ ์ํ์ง์ญ์ ๋๋ค. ๋ฐ๋ผ์ 16์ returnํฉ๋๋ค.
- (3, 2), (3, 3)์ ์ง๋ขฐ๊ฐ ์์ผ๋ฏ๋ก ์ง๋ขฐ๊ฐ ์๋ ์ง์ญ๊ณผ ์ง๋ขฐ์ ์ธ์ ํ ์, ์๋, ์ข, ์ฐ, ๋๊ฐ์ ์ ์ํ์ง์ญ์ ๋๋ค. ๋ฐ๋ผ์ ์ํ์ง์ญ์ ์ ์ธํ ์นธ ์ 13์ returnํฉ๋๋ค.
- ๋ชจ๋ ์ง์ญ์ ์ง๋ขฐ๊ฐ ์์ผ๋ฏ๋ก ์์ ์ง์ญ์ ์์ต๋๋ค. ๋ฐ๋ผ์ 0์ returnํฉ๋๋ค.
๐ Solution
ํ์ด
class Solution {
public int solution(int[][] board) {
int n = board.length;
int[][] copy = new int[n][n];
for(int row=0; row<n; row++) {
for(int col=0; col<n; col++) {
if (board[row][col]==1) {
destroy(col, row, n, copy);
}
}
}
int cnt = 0;
for(int i=0; i<copy.length; i++) {
for(int j=0; j<copy.length; j++) {
if(copy[i][j]==0) {
cnt++;
}
}
}
return cnt;
}
private static void destroy(int col, int row, int n, int[][] copy) {
for(int r=row-1; r<=row+1; r++) {
if(r<0 || r>=n) {
continue;
} else {
for(int c=col-1; c<=col+1; c++) {
if(c<0 || c>=n) {
continue;
} else {
copy[r][c] = 1;
}
}
}
}
}
}
์ฒ๋ฆฌ์๋ VERY GOOD
Comment
์ด์ฐจ์ ๋ฐฐ์ด ๋ฌธ์ ๋ฅผ ํ ๋๋ง๋ค, ๊ณ 1 ๊ฒจ์ธ์ ์ด๊ณผ์์ ๋ฌธ๊ณผ๋ก ์ง๋ก๋ฅผ ๋ฐ๊ฟจ๋ ๋ด ๋ชจ์ต์ด ๋ ์ค๋ฅธ๋ค..^^.. ๊ทธ ๋ ํํผํ ๋๋ถ์ ๋๋ n๋ ์ด ํ์ฉ ์ง๋ ์ง๊ธ๋ ์ํ ๋๋ฌธ์ ๊ฐ๊ณ ์ ์ค์ด๋๋ค๐ ํ ์ด ๋ง์ ๊ผญ ์ ํด์ฃผ๊ณ ์ถ์๋ฐ ์ ํ ๊ธธ์ด ์๋ค..
์ด์ฐจ์ ๋ฌธ์ ๋ฅผ ํ ๋ ๊ฐ์ฅ ํ๋ ์ ์ ๊ฐ๋ ฅํ ๊ฑฐ๋ถ๊ฐ ๋ฟ์ด ์๋๋ผ ์ขํ์ ์ด๋ฏธ์งํ๊ฐ ์ ํ ๋์ง ์๋๋ค๋ ์ ์ด๋ค. ์ด๋ฏธ์งํ๊ฐ ๋์ง ์์ผ๋ ๋ ์ค๋ฅด๋ ์ฝ๋๋ ๊ทธ์ ๋ ธ๊ฐ๋ค์ฑ์ด ์ง๊ฒ ๊น๋ฆฐ... ๊ทธ๋ฐ...ใ
๋ฌด์ํ๋ฉด ์ฉ๊ฐํ๋ค๊ณ , ๋๋ ์๋์ ๊ฐ์ ์ฝ๋๋ฅผ ์งฐ๋ค.
class Solution {
public int solution(int[][] board) {
int n = board.length;
int[][] copy = new int[n][n];
for(int col=0; col<n; col++) {
for(int row=0; row<n; row++) {
if(board[row][col] == 1) {
boolean colMinus = (col-1)>-1;
boolean colPlus = (col+1)<n;
boolean rowMinus = (row-1)>-1;
boolean rowPlus = (row+1)<n;
copy[row][col] = 1;
if (colMinus && colPlus && rowMinus && rowPlus) {
copy[row-1][col-1] = 1;
copy[row][col-1] = 1;
copy[row+1][col-1] = 1;
copy[row-1][col] = 1;
copy[row+1][col] = 1;
copy[row-1][col+1] = 1;
copy[row][col+1] = 1;
copy[row+1][col+1] = 1;
} else if (colMinus && colPlus) {
if(rowMinus) {
copy[row-1][col-1] = 1;
copy[row][col-1] = 1;
copy[row-1][col] = 1;
copy[row-1][col+1] = 1;
copy[row][col+1] = 1;
} else if (rowPlus) {
copy[row][col-1] = 1;
copy[row+1][col-1] = 1;
copy[row+1][col] = 1;
copy[row][col+1] = 1;
copy[row+1][col+1] = 1;
}
} else if (colMinus) {
if(rowMinus) {
copy[row-1][col-1] = 1;
copy[row][col-1] = 1;
copy[row-1][col] = 1;
} else if (rowPlus) {
copy[row][col-1] = 1;
copy[row+1][col-1] = 1;
copy[row+1][col] = 1;
}
} else if (colPlus) {
if(rowMinus) {
copy[row-1][col] = 1;
copy[row-1][col+1] = 1;
copy[row][col+1] = 1;
} else if (rowPlus) {
copy[row+1][col] = 1;
copy[row][col+1] = 1;
copy[row+1][col+1] = 1;
}
} else {
if(rowMinus) {
copy[row-1][col] = 1;
} else if (rowPlus) {
copy[row+1][col] = 1;
}
}
}
}
}
int cnt = 0;
for(int i=0; i<copy.length; i++) {
for(int j=0; j<copy.length; j++) {
// System.out.println("["+i+"]["+j+"] = "+copy[i][j]);
if(copy[i][j]==0) {
cnt++;
}
}
}
return cnt;
}
}
์ด๊ฑธ ๋ณด๊ฒ ๋ ์ฌ๋๋ค์ ๋์ ๋ฌด๋ชจํจ์ ๊ฒฝ์ ํ๊ฒ ์ง๋ง ๊ทธ๋ฅ ์ฌ๋ ธ๋ค. ์ด์ฐจํผ ์ด๊ฑธ ์ฝ๋ ๊ฑด ๋๋ฟ์ธ๊ฑฐ ๊ฐ์ผ๋๊น๐ ๋ถ๋๋ฌ์์ ๋์ ๋ชซ.
๋ฌธ์ ๋ ๋ ธ๊ฐ๋ค๋ผ๋ ์ฝ๋๊ฐ ์ ์คํ๋๋ฉด ๊ด์ฐฎ์์ ํ ๋ฐ, ์ ํ ์๋์๋ค. ๋๋์ฒด ํ ์คํธ 4์ 5๋ ๋ฌด์จ ๊ฐ์ด ๋ค์ด๊ฐ์์๊น.. ์์ง๋ ๋ฏธ์คํ ๋ฆฌ ๊ทธ ์์ฒด.
ํ์ฐธ์ ๊ณ ๋ฏผํด๋ดค๋๋ฐ, ๋์ ํ ์์ธ ์ํฉ์ด ๋ ์ค๋ฅด์ง ์์๋ค. ๊ฒฐ๊ตญ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋์ ๋ ธ๊ฐ๋ค๋ก ์ปค๋ฒํ๊ธฐ์๋ ๋ฌด๋ฆฌ๋ผ๋ ํ๋จ์ ํ๋ค.
์ด ๋ฌธ์ ์์ ๊ฐ์ฅ ์ค์ํ ํฌ์ธํธ๊ฐ ๋ฌด์์ธ์ง๋ถํฐ ์ ๊ทผํ๋ค. ํฌ์ธํธ๋ ์ง๋ขฐ๊ฐ ์๋ ํ[row]๊ณผ ์ด[col]์ ±1ํ ์์น๋ค์ด ๋ฐฐ์ด์ ๋ฒ์๋ฅผ ๋์ด๊ฐ๋๋ ์๋๋์ด๋ค. ์ด ํฌ์ธํธ๋ฅผ ๋ฉ์ธ์์ ์ฒ๋ฆฌํ๋ ค๊ณ ํ๋ ๋ ธ๊ฐ๋ค ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋์๋๋ฐ ๋ฌธ๋ ํด๋์คํํด์ ์ฌ์ฉํ๋ฉด ๋์ง ์๋? ํ๋ ์๊ฐ์ด ๋ค์๋ค.
ํด๋์ค destroy์ ์ธ์๋ก๋ int col, int row, int n, int[][] copy๋ฅผ ์ ๋ฌํ๋๋ฐ ๊ฐ๊ฐ ํ ์์น, ์ด ์์น, ๋ฐฐ์ด ๊ธธ์ด, ๊ฐ์ ์ฝ์ ํ ๋ฐฐ์ด์ ์๋ฏธํ๋ค. ์ง๋ขฐ๊ฐ ์๋ ํ[row]๊ณผ ์ด[col]์ ±1ํ ์์น๊ฐ ๋ฐฐ์ด์ ๋ฒ์๋ฅผ ๋์ด๊ฐ๋ฉด continue;๋ฅผ, ๋ฒ์ ๋ด์ธ ๊ฒฝ์ฐ์๋ copy[r][c]์ 1์ ์ฝ์ ํ๋๋ก ํด๋์ค destroy๋ฅผ ๊ตฌํํ๋ค. (int ๋ฐฐ์ด์ ์ด๊ธฐ ๊ฐ์ 0์ด๋ฏ๋ก ๋ณ๋์ ์ฒ๋ฆฌ๊ฐ ํ์ ์์๋ค)
๊ทธ ๋ค์ ์ด์ค for๋ฌธ์ ์ฌ์ฉํด์ ๊ฐ 0์ ๊ฐ์ง๋ ๋ฐฐ์ด๊ฐ์ cnt++;๋ก ์์๋ธ ๋ค returnํ๋ฉด ๋!
๊ตฌํํ๊ณ ๋๋ ๊ทธ๋ ๊ฒ ์ด๋ ต์ง ์์ ๋ฌธ์ ์๋๋ฐ.. ์ญ์ ๋ญ๋ ์ฒซ ๋จ์ถ๊ฐ ์ค์ํ ๊ฒ ๊ฐ๋ค.
'Programmers lv-0' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํํ - Java [ํ๋ก๊ทธ๋๋จธ์ค ์ ๋ฌธ] (0) | 2022.11.28 |
---|---|
๋ฑ์ ๋งค๊ธฐ๊ธฐ - Java [ํ๋ก๊ทธ๋๋จธ์ค ์ ๋ฌธ] (0) | 2022.11.28 |
ํน์ดํ ์ ๋ ฌ - Java [ํ๋ก๊ทธ๋๋จธ์ค ์ ๋ฌธ] (1) | 2022.11.28 |
์ธ๊ณ์ด ์ฌ์ - Java [ํ๋ก๊ทธ๋๋จธ์ค ์ ๋ฌธ] (0) | 2022.11.28 |
์ง์ฌ๊ฐํ ๋์ด ๊ตฌํ๊ธฐ - Java [ํ๋ก๊ทธ๋๋จธ์ค ์ ๋ฌธ] (1) | 2022.11.28 |
์บ๋ฆญํฐ์ ์ขํ - Java [ํ๋ก๊ทธ๋๋จธ์ค ์ ๋ฌธ] (1) | 2022.11.28 |
๋๊ธ