티스토리 뷰
백준에서 stdin의 파일을 읽을 때 윈도우에서는 '/r/n'을 해야하지만 백준에 제출할 떄는 개행 문자를 '/n'로 해야함...
import * as fs from 'fs';
const solution = (map: number[][]) => {
let houseIdx = 2;
const houseCntArr: number[] = [];
const dx = [-1, 1, 0, 0];
const dy = [0, 0, -1, 1];
const bfs = (x: number, y: number) => {
const queue: {
x: number;
y: number;
}[] = [];
queue.push({
x,
y,
});
let cnt = 0;
while (queue.length > 0) {
const cur = queue.shift();
const x = cur?.x ?? 10;
const y = cur?.y ?? 10;
if (map[x][y] === 1) {
map[x][y] = houseIdx;
cnt++;
} else {
continue;
}
for (let i = 0; i < 4; i++) {
const next = { x: x + dx[i], y: y + dy[i] };
if (
next.x >= 0 &&
next.y >= 0 &&
next.x < map.length &&
next.y < map.length &&
map[next.x][next.y] === 1
) {
queue.push(next);
}
}
}
houseCntArr.push(cnt);
houseIdx++;
};
for (let i = 0; i < map.length; i++) {
for (let j = 0; j < map.length; j++) {
if (map[i][j] === 1) {
bfs(i, j);
}
}
}
houseCntArr.sort((a, b) => a - b);
console.log(houseCntArr.length);
houseCntArr.map((val) => console.log(val));
};
const inputData = fs.readFileSync('dev/stdin').toString().split('\r');
const n = inputData.shift();
const mapInput = inputData.map((v) => {
return v.split('').map((v2) => +v2);
});
solution(mapInput);
'Algorithm > 백준' 카테고리의 다른 글
Backjoon(백준) 1699- 제곱수의 합 (Java) (0) | 2020.05.09 |
---|---|
Backjoon(백준) 2470- 두 용액 (Java) (0) | 2020.05.06 |
Backjoon(백준) 9251- LCS (Java) (0) | 2020.05.05 |
Backjoon(백준) 11054 - 가장 긴 바이토닉 부분 수열(Java) (0) | 2020.05.02 |
Backjoon(백준) 11053번 - 가장 긴 증가하는 부분 수열(Java) (0) | 2020.05.02 |
댓글
최근에 올라온 글
최근에 달린 댓글
TAG
- 20200424
- 20201204
- chapter7
- 20200512
- 생활코딩리눅스
- 20200420
- 20200417
- 20200425
- 20200427
- 20200804
- 20200406
- 20200319
- 20200502
- 20200413
- likelion
- 20200503
- 20200624
- 20200429
- 20200403
- 20200317
- 20200510
- chapter8
- 20200622
- 20200423
- 20200330
- 20200428
- 20200415
- 20200421
- 20200504
- 백준
- Total
- Today
- Yesterday