ํฐ์คํ ๋ฆฌ ๋ทฐ
[JavaScript/node.js] ๋ฐฑ์ค 24513๋ฒ - ์ข๋น ๋ฐ์ด๋ฌ์ค
๊ฐ๋ฐ๊ฐ๊ตด๐ธ 2022. 9. 8. 19:46[๋ฌธ์ ]
https://www.acmicpc.net/problem/24513
[ํ์ด]
BFS๋ฅผ ํตํด ๋ฐ์ด๋ฌ์ค๋ฅผ ํผํธ๋ฆฝ๋๋ค.
์ด๊ธฐ ์ธํ
- village : ๋ง์ ์ ๋ณด ์ ์ฅ
- virus: [x์ขํ, y์ขํ, ๋ฐ์ด๋ฌ์ค ํ์ ] ํํ๋ก ๋ฐ์ด๋ฌ์ค ์ ๋ณด ์ ์ฅ
- checkOut(x, y) : ๋ง์์ ๋ฒ์ด๋ ์์น๋ฉด true, ๋ง์ ์์ ์๋ค๋ฉด false๋ฅผ ๋ฐํ
ํ์ด ๊ณผ์
bfs๋ฅผ ํตํด ๊ฐฑ์ ๋๋ ๋ฐ์ด๋ฌ์ค ์ ๋ณด๋ฅผ virus์ ์ ์ฅํ๋ฉฐ ๋ชจ๋ ๊ฒ์ฌํฉ๋๋ค.
์ด๋ ์ฃผ์ํ ์ ์ ๋์๊ฐ๋์ 1๋ฒ ๋ฐ์ด๋ฌ์ค์ 2๋ฒ ๋ฐ์ด๋ฌ์ค๊ฐ ๋ง๋๋ฉด 3๋ฒ ๋ฐ์ด๋ฌ์ค๊ฐ ๋๋ ๊ฒ์ ๋๋ค.
๋ฐ๋ผ์ ์๋์ ๊ฐ์ด ์ด์ ๋ฐ์ด๋ฌ์ค ํ์ ์์ +2์ฉ ์ซ์๋ฅผ ๋ํด์ฃผ์ด ์๊ฐ์ ๊ตฌ๋ถํ์์ต๋๋ค.
- ์ฒซ๋ฒ์งธ ์๊ฐ์ ํผ์ง ๋ฐ์ด๋ฌ์ค : 1, 2
- ๋๋ฒ์งธ ์๊ฐ์ ํผ์ง ๋ฐ์ด๋ฌ์ค : 3, 4
- ์ธ๋ฒ์งธ ์๊ฐ์ ํผ์ง ๋ฐ์ด๋ฌ์ค : 5, 6
(ํธ์์ฑ์ ์ํด 3๋ฒ ๋ฐ์ด๋ฌ์ค๋ก ๋ฒ์ง ๋ง์์ Infinity๋ฅผ ์ ์ฅํ์ฌ ๊ตฌ๋ถ)
bfs์ ๋์๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. ๋ง์ฝ village๊ฐ -1์ด๋ Infinity๋ผ๋ฉด ๋์ด์ ๋ฐ์ด๋ฌ์ค๊ฐ ํผ์ง ์ ์์ผ๋ฏ๋ก continueํฉ๋๋ค.
2. ์ํ์ข์ฐ ๋ฐฉํฅ์ผ๋ก ๋ฐ์ด๋ฌ์ค๊ฐ ํผ์ง ์ ์๋์ง ๊ฒ์ฌํฉ๋๋ค.
- village๊ฐ 0์ด๋ฉด ์์ง ๋ฐ์ด๋ฌ์ค๊ฐ ํผ์ง์ง ์์์ผ๋ฏ๋ก ์ด์ ๋ฐ์ด๋ฌ์ค์ type + 2๋ฅผ ์ ์ฅํ virus์ ํด๋น ์ ๋ณด๋ฅผ push
- village์ ์๋ก ๋ค์ด์จ ๋ฐ์ด๋ฌ์ค์ type์ด ๋ค๋ฅธ ๊ฒฝ์ฐ(์ง, ํ ์์ผ๋) ์๋ง ๋ฐ์ด๋ฌ์ค 3์ด ๋ ์ ์๋์ง ๊ฒ์ฌํฉ๋๋ค.
- village๊ฐ ํ์๋ฉด (village์ ์ซ์ - 1) === (type + 2) ์ธ ๊ฒฝ์ฐ์ ๋ฐ์ด๋ฌ์ค 3์ผ๋ก ๊ฐฑ์
- village๊ฐ ์ง์๋ฉด (village์ ์ซ์ + 1) === (type + 2) ์ธ ๊ฒฝ์ฐ์ ๋ฐ์ด๋ฌ์ค 3์ผ๋ก ๊ฐฑ์
๋ง์ง๋ง์ผ๋ก ๋ง์ ์ ๋ณด๋ฅผ ๋ชจ๋ ํ์ํ๋ฉฐ ๋ฐ์ด๋ฌ์ค 1, 2, 3์ ๊ฐ์๋ฅผ ๋ํฉ๋๋ค.
- -1์ด๋ 0์ด๋ฉด ๋ฐ์ด๋ฌ์ค๊ฐ ์์
- ํ์๋ฉด 1๋ฒ ๋ฐ์ด๋ฌ์ค
- ์ง์๋ฉด 2๋ฒ ๋ฐ์ด๋ฌ์ค
- Infinity๋ฉด 3๋ฒ ๋ฐ์ด๋ฌ์ค
[์ฝ๋]
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
const input = fs.readFileSync(filePath).toString().split('\n');
const [N, M] = input[0].split(" ").map(Number);
// ๋ง์ ์ ๋ณด
const village = [];
// ๋ฐ์ด๋ฌ์ค ์์น
let virus = [];
for (let i = 1; i <= N; i++) {
village.push(input[i].split(" ").map(Number));
for (let j = 0; j < M; j++) {
if (village[i - 1][j] === 1 || village[i - 1][j] === 2) {
// x, y, type
virus.push([i - 1, j, village[i - 1][j]]);
}
}
}
const checkOut = (x, y) => {
if (x < 0 || y < 0 || x >= N || y >= M) {
return true;
}
return false;
}
const dx = [1, -1, 0, 0];
const dy = [0, 0, 1, -1];
let idx = 0;
let time = 2;
// ๋์๊ฐ๋๋ฅผ ํ์ธํด์ผํจ!!
// ๋ฐ์ด๋ฌ์ค๊ฐ ๋ชจ๋ ํผ์ง
while (idx < virus.length) {
const [x, y, type] = virus[idx];
idx++;
if(village[x][y] === -1 || village[x][y] === Infinity) {
continue;
}
for (let i = 0; i < 4; i++) {
const [nx, ny] = [x + dx[i], y + dy[i]];
if (checkOut(nx, ny) || village[nx][ny] === -1 || village[nx][ny] === Infinity) {
continue;
}
if(village[nx][ny] === 0) {
// ์ฒซ ๋ฐฉ๋ฌธ
village[nx][ny] = type + 2;
virus.push([nx, ny, type + 2]);
} else {
// ๋์๊ฐ๋ ๋ค๋ฅธ ๋ฐ์ด๋ฌ์ค ๋ฐฉ๋ฌธ
if(type%2 !== village[nx][ny]%2) {
// ๋ฐ์ด๋ฌ์ค 1์ด ๋ค์ด์ด
if(type%2 === 1 && village[nx][ny] - 1 === type + 2) {
village[nx][ny] = Infinity;
} else if(type%2 === 0 && village[nx][ny] + 1 === type + 2) {
village[nx][ny] = Infinity;
}
}
}
}
}
let one = 0;
let two = 0;
let three = 0;
for(let i=0;i<N;i++) {
for(let j=0;j<M;j++) {
if(village[i][j] === -1 || village[i][j] === 0) {
continue;
}
if(village[i][j] %2 === 1) one++;
else if(village[i][j] % 2 === 0) two++;
else if(village[i][j] === Infinity) three++;
}
}
console.log(one, two, three);
'Algorithm > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript/node.js] ๋ฐฑ์ค 14943๋ฒ - ๋ฒผ๋ฃฉ ์์ฅ (0) | 2022.09.19 |
---|---|
[JavaScript/node.js] ๋ฐฑ์ค 3980๋ฒ - ์ ๋ฐ ๋ช ๋จ (0) | 2022.09.03 |
[JavaScript/node.js] ๋ฐฑ์ค 1522๋ฒ - ๋ฌธ์์ด ๊ตํ (0) | 2022.08.24 |
[JavaScript/node.js] ๋ฐฑ์ค 20437๋ฒ - ๋ฌธ์์ด ๊ฒ์ 2 (1) | 2022.08.23 |
[JavaScript] ๋ฐฑ์ค 13549๋ฒ - ์จ๋ฐ๊ผญ์ง 3 (0) | 2022.08.05 |
- Total
- Today
- Yesterday
- Baekjoon
- ์นด์นด์ค ์ธํด
- ํ๋ก๊ทธ๋๋จธ์ค
- http
- ์ฝ๋ฉํ ์คํธ
- ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
- ํฌํฌ์ธํฐ
- ํ๋กํผํฐ
- ๋ฐฑ์ค node.js
- ๋ฐฑ์ค
- ์๋ฐ
- ์ด๋ถํ์
- ์ ์ญ ๋ณ์
- ๋์์ธ ํจํด
- ๋คํธ์ํฌ
- ์ด์์ฒด์
- ์๊ณ ๋ฆฌ์ฆ
- TDD
- fp
- ๋ฐฑ์ค javascript
- map
- 2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด
- git
- ์๋ฐ์คํฌ๋ฆฝํธ
- ํ๋กํ ์ฝ
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ deep dive
- JavaScript
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ๋ ์์ปฌ ํ๊ฒฝ
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |