개발자 톡
연습문제 톡
GINI야 도와줘
JS
- 등록일
- 2024-11-15 23:31:26
- 조회수
- 109
- 작성자
- vavoya6324
비 오고 사람이 움직여야 4번 통과되고
5, 7번 틀리던 거는 조건문 손봤더니, 왜 갑자기 맞았는지는 모르겠는데 맞았습니다.
const fs = require('fs'); const input = fs.readFileSync('input.txt', 'utf8').trim().split(/\n+/); const [R, C] = input[0].split(/\s+/).map(Number); let position = [] let rainPosition = [] const canMove = 0b1 const moved = 0b10 const rained = 0b100 const river = 0b1000 const home = 0b10000 // 1 -> 이동 가능 // 10 -> 지나감 // 100 -> 비 // 1000 -> 강 // 10000 -> 집 const map = input.slice(1).map((line, x) => line .trim() .split('') .map((v, y) => { // 비 if (v === '*') { rainPosition.push([x, y]); return rained } // 강 if (v === 'X') { return river } // 세차장 if (v === 'W') { position.push([x, y]) return moved } // 집 if (v === 'H') { return home } if (v === '.') { return canMove } })) /** * * @returns {number} 0 -> 진출 불가, 1 -> 진출 함, 2 -> 집 도착 */ function bfs1() { const newPosition = [] while (position.length > 0) { const [x, y] = position.pop() if (map[x]) { if (map[x][y+1] === home) { return 2 } else if (map[x][y+1] === canMove) { map[x][y+1] = moved newPosition.push([x, y+1]) } if (map[x][y-1] === home) { return 2 } else if (map[x][y-1] === canMove) { map[x][y+1] = moved newPosition.push([x, y-1]) } } if (map[x+1]) { if (map[x+1][y] === home) { return 2 } else if (map[x+1][y] === canMove) { map[x+1][y] = moved newPosition.push([x+1, y]) } } if (map[x-1]) { if (map[x-1][y] === home) { return 2 } else if (map[x-1][y] === canMove) { map[x-1][y] = moved newPosition.push([x-1, y]) } } } if (newPosition.length > 0) { position = newPosition return 1 } else { return 0 } } function bfs2() { const newPosition = [] while (rainPosition.length > 0) { const [x, y] = rainPosition.pop() if (map[x] && ((map[x][y+1] & (canMove | moved)) > 0)) { map[x][y+1] = rained newPosition.push([x, y+1]) } if (map[x] && ((map[x][y-1] & (canMove | moved)) > 0)) { map[x][y-1] = rained newPosition.push([x, y-1]) } if (map[x+1] && ((map[x+1][y] & (canMove | moved)) > 0)) { map[x+1][y] = rained newPosition.push([x+1, y]) } if (map[x-1] && ((map[x-1][y] & (canMove | moved)) > 0)) { map[x-1][y] = rained newPosition.push([x-1, y]) } } rainPosition = newPosition } let time = 1 while (true) { // 비 이동 bfs2() // 사람 이동 const result = bfs1(); if (result === 0) { console.log('FAIL') break } else if (result === 2) { console.log(time) break } time++ }
#GINI야_도와줘
#js