π νλ‘κ·Έλλ¨Έμ€ 120866 : μμ μ§λ - Javascript
λ¬Έμ μ€λͺ
λ€μ κ·Έλ¦Όκ³Ό κ°μ΄ μ§λ’°κ° μλ μ§μκ³Ό μ§λ’°μ μΈμ ν μ, μλ, μ’, μ° λκ°μ μΉΈμ λͺ¨λ μνμ§μμΌλ‘ λΆλ₯ν©λλ€.
μ§λ’°λ 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