๐ ํ๋ก๊ทธ๋๋จธ์ค 120866 : ์์ ์ง๋ - Javascript
2023-03-04
๋ฌธ์ ์ค๋ช
๋ค์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ง๋ขฐ๊ฐ ์๋ ์ง์ญ๊ณผ ์ง๋ขฐ์ ์ธ์ ํ ์, ์๋, ์ข, ์ฐ ๋๊ฐ์ ์นธ์ ๋ชจ๋ ์ํ์ง์ญ์ผ๋ก ๋ถ๋ฅํฉ๋๋ค.
์ง๋ขฐ๋ 2์ฐจ์ ๋ฐฐ์ด board์ 1๋ก ํ์๋์ด ์๊ณ board์๋ ์ง๋ขฐ๊ฐ ๋งค์ค ๋ ์ง์ญ 1๊ณผ, ์ง๋ขฐ๊ฐ ์๋ ์ง์ญ 0๋ง ์กด์ฌํฉ๋๋ค.
์ง๋ขฐ๊ฐ ๋งค์ค๋ ์ง์ญ์ ์ง๋ board๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์์ ํ ์ง์ญ์ ์นธ ์๋ฅผ returnํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- board๋ ๋ฐฐ์ด์ ๋๋ค.
- 1 โค n โค 100
- ์ง๋ขฐ๋ 1๋ก ํ์๋์ด ์์ต๋๋ค.
- board์๋ ์ง๋ขฐ๊ฐ ์๋ ์ง์ญ 1๊ณผ ์ง๋ขฐ๊ฐ ์๋ ์ง์ญ 0๋ง ์กด์ฌํฉ๋๋ค.
์ ์ถ๋ ฅ ์
board | result |
---|---|
[[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 |
์์ #1
(3, 2)์ ์ง๋ขฐ๊ฐ ์์ผ๋ฏ๋ก ์ง๋ขฐ๊ฐ ์๋ ์ง์ญ๊ณผ ์ง๋ขฐ์ ์ธ์ ํ ์, ์๋, ์ข, ์ฐ, ๋๊ฐ์ ์ด 8์นธ์ ์ํ์ง์ญ์ ๋๋ค. ๋ฐ๋ผ์ 16์ returnํฉ๋๋ค.์์ #2
(3, 2), (3, 3)์ ์ง๋ขฐ๊ฐ ์์ผ๋ฏ๋ก ์ง๋ขฐ๊ฐ ์๋ ์ง์ญ๊ณผ ์ง๋ขฐ์ ์ธ์ ํ ์, ์๋, ์ข, ์ฐ, ๋๊ฐ์ ์ ์ํ์ง์ญ์ ๋๋ค. ๋ฐ๋ผ์ ์ํ์ง์ญ์ ์ ์ธํ ์นธ ์ 13์ returnํฉ๋๋ค.์์ #2
๋ชจ๋ ์ง์ญ์ ์ง๋ขฐ๊ฐ ์์ผ๋ฏ๋ก ์์ ์ง์ญ์ ์์ต๋๋ค. ๋ฐ๋ผ์ 0์ returnํฉ๋๋ค.
ํ์ด ๊ณผ์
๋จผ์ ์ฃผ์ด์ง 2์ฐจ์ ๋ฐฐ์ด์์ ์ง๋ขฐ๊ฐ ๋งค์ค ๋ ์ง์ญ ์ฃผ๋ณ์ ์์ ํ ์ง์ญ์ ์ํ์ง์ญ์ผ๋ก ๋ฐ๊ฟ๋๋ค.
- ์์ ํ ์ง์ญ์ 0, ์ง๋ขฐ๊ฐ ๋งค์ค ๋ ์ง์ญ์ 1๋ก ํํ๋๊ธฐ ๋๋ฌธ์ ์ํ์ง์ญ์ 2๋ก ํํํ์ต๋๋ค.
๊ทธ ํ ๋จ์ ์์ ์ง์ญ์ ์๋ฅผ ๋ฐํํฉ๋๋ค.
const SAFE = 0; //์์ ํ ์ง์ญ
const BOOM = 1; //์ง๋ขฐ๊ฐ ๋งค์ค ๋ ์ง์ญ
const WARN = 2; //์ํ์ง์ญ
function solution(board) {
//board๋ n*n์ ๋ฐฐ์ด์ด๊ธฐ ๋๋ฌธ์ n์ ๊ตฌํจ
const n = board.length;
//์ฃผ์ด์ง ์ง์ญ๊ณผ ์ธ์ ํ ์์ ํ ์ง์ญ์ ์ํ์ง์ญ์ผ๋ก ๋ณ๊ฒฝํ๋ ํจ์
const markWarn = (x, y) => {
//board๋ฅผ ๋ฒ์ด๋์ง ์๋ ํ์ ๋ฒ์๋ฅผ ๋ฐํํ๋ ํจ์
const range = (k) => [Math.max(0, k - 1), k, Math.min(n - 1, k + 1)];
//์ฃผ์ด์ง x, y๋ก ๊ตฌํ ๋ฒ์ ๋ด์ ์์ ํ ์ง์ญ์ ์ํ ์ง์ญ์ผ๋ก ๋ณ๊ฒฝ
for (const ry of range(y)) {
for (const rx of range(x)) {
if (board[ry][rx] === SAFE) {
board[ry][rx] = WARN;
}
}
}
};
//๋ชจ๋ ์์๋ฅผ ์ํํ์ฌ ์ํ์ง์ญ์ ํ์
for (let y = 0; y < n; ++y) {
for (let x = 0; x < n; ++x) {
if (board[y][x] === BOOM) {
markWarn(x, y);
}
}
}
//๋ณด๋๋ฅผ 1์ฐจ์ ๋ฐฐ์ด๋ก ๋ฐ๊พธ๊ณ , ์์ ํ ์ง์ญ์ ์๋ฅผ ๊ตฌํด ๋ฐํ
return board.flat().filter((el) => el === SAFE).length;
}
๊ฐ์
๊ธฐ์กด ๋ฐฉ์๊ณผ ์ ๋ฐ๋๋ก, ํ์ธํ ์ง์ญ๊ณผ ์ธ์ ์ง์ญ์ ์ง๋ขฐ๊ฐ ๋งค์ค๋ ์ง์ญ์ด ์๋์ง๋ฅผ ํ์ธํด ์์ ํ ์ง์ญ์ ์๋ฅผ ๊ตฌํ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋๋ฅผ ๋ ์ง๊ด์ ์ผ๋ก ๊ฐ์ ํ ์ ์์๊ณ , ๋ถํ์ํ๊ฒ ๋ง์ ๋ฐฐ์ด ์์ ๋ฐ ์ ๊ทผ ํ์๋ฅผ ์ค์ผ ์ ์์์ต๋๋ค.
function solution(board) {
//board๋ n*n์ ๋ฐฐ์ด์ด๊ธฐ ๋๋ฌธ์ n์ ๊ตฌํจ
const n = board.length;
//์ฃผ์ด์ง ์ง์ญ์ด ์์ ํ ์ง์ญ์ธ์ง ํ์ธํ๋ ํจ์
const isSafe = (x, y) => {
const range = (k) => [k - 1, k, k + 1];
//๋ฒ์ ๋ด์ ์ง๋ขฐ๊ฐ ๋งค์ค๋ ์ง์ญ์ด ์กด์ฌํ๋ฉด false๋ฅผ ๋ฐํ
for (const ry of range(y)) {
for (const rx of range(x)) {
if (board[ry]?.[rx]) {
return false;
}
}
}
//์ฃผ๋ณ ์ง์ญ์ด ๋ชจ๋ ๋น ์ง์ญ์ด๋ฉด true๋ฅผ ๋ฐํ
return true;
};
//๋ชจ๋ ์ง์ญ์ ์ํํ์ฌ ์์ ํ ์ง์ญ์ ์๋ฅผ ๊ตฌํด ๋ฐํ
let answer = 0;
for (let y = 0; y < n; ++y) {
for (let x = 0; x < n; ++x) {
answer += isSafe(x, y);
}
}
return answer;
}
๋ฌธ์ ์์ 0์ ์์ ํ ์ง์ญ์ด ์๋๋ผ ์ง๋ขฐ๊ฐ ๋งค์ค๋์ง ์์ ์ง์ญ์ ์๋ฏธํ๊ธฐ ๋๋ฌธ์ ์ด ํ์ด๊ฐ ๋ ์์ฐ์ค๋ฌ์ด ๊ฒ ๊ฐ์ต๋๋ค. ์ฒ์์ ์ ์ ๋ ๊ฒ ํ์์ง..
์์ฝ๋ฉ (CodeGolf)
์กฐ๊ธ ๋ ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ๋ฐ๊พธ์ด ์๋์ ๊ฐ์ด ์ ๋ฆฌํ ์ ์์ต๋๋ค.
solution=_=>_.flatMap((r,y)=>r.map((v,x)=>{for(i=-1;i<2;++i)for(j=-1;j<2;++j)if(_[y+i]?.[x+j])return 0;return 1})).filter(v=>v).length