개발자 톡
연습문제 톡
동계 테스트 시점 예측
JS
- 등록일
- 2024-11-18 18:05:06
- 조회수
- 20
- 작성자
- vavoya6324
'
const fs = require('fs'); const input = fs.readFileSync('input.txt', 'utf8').trim().split(/\n+/); const [N, M] = input[0].split(/\s+/).map(Number); const box = Array.from({length: N + 2}, () => Array.from({length: M + 2}, () => 0)); input.slice(1).forEach((line, i1) => { line.split(/\s+/).forEach((v2, i2) => { box[i1 + 1][i2 + 1] = Number(v2); }) }) const visitedBox = Array.from({length: N + 2}, () => Array.from({length: M + 2}, () => 0)); let time = 0 function bfs() { time++ const count1Set = new Set() const count2Set = new Set() const bfsQue = new Set([[0, 0]]) visitedBox[0][0] = time; function test(x, y) { const string =`${x},${y}` if (box[x] !== undefined) { if (box[x][y] === 1) { if (count1Set.has(string)) { count1Set.delete(string) count2Set.add(string) } else if (!count2Set.has(string)) { count1Set.add(string) } } // 얼음이 아닌 곳이, 현재 시각 기준으로 방문한 곳이 아니면 else if (box[x][y] === 0 && visitedBox[x][y] !== time) { bfsQue.add([x, y]) visitedBox[x][y] = time; } } } // 순회 for (let position of bfsQue) { const [x, y] = position // 읽었으니 지우기 bfsQue.delete(position) // 다음 위치 test(x, y + 1) test(x, y - 1) test(x + 1, y) test(x - 1, y) } // 지울게 없으면 if (count2Set.size === 0) { return false } for (let i of count2Set) { const [x, y] = i.split(',') box[x][y] = 0 } return true } while (bfs()) {} console.log(time - 1)
#동계_테스트_시점_예측
#js