반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- socket
- 크롤링
- 가천대
- 소켓
- dp
- Nestjs
- 백준
- type challenge
- ip
- 타입 챌린지
- 타입스크립트
- 쉬운 문제
- dfs
- 알고리즘
- 레벨 1
- HTTP
- typescript
- 문자열
- 프로그래머스 레벨 2
- TCP
- Algorithm
- BFS
- 그래프
- 자바스크립트
- javascript
- HTTP 완벽 가이드
- Node.js
- 프로그래머스
- 수학
- Crawling
Archives
- Today
- Total
kakasoo
[node.js] 섬의 개수 ( 백준 4963번 ) 본문
반응형
// 백준 4963번 섬의 개수를 풀었습니다.
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = [];
let N = 0;
let M = 0;
rl.on("line", (line) => {
if (!N) {
if (line === "0 0") {
process.exit();
}
[M, N] = line.split(" ").map(Number);
} else {
input.push(line);
if (input.length === N) {
main();
N = 0;
input = [];
}
}
});
const main = () => {
const graph = [];
const visited = [];
for (let i = 0; i < N; i++) {
graph[i] = input[i].split(" ").map(Number);
visited[i] = new Array(M).fill(false);
}
const bfs = (yPos, xPos) => {
const xMove = [0, 0, -1, 1, -1, -1, 1, 1];
const yMove = [1, -1, 0, 0, 1, -1, 1, -1];
const queue = [];
queue.push({ yPos: yPos, xPos: xPos });
visited[yPos][xPos] = true;
while (queue.length) {
const { yPos, xPos } = queue.shift();
for (let i = 0; i < 8; i++) {
const nextY = yPos + yMove[i];
const nextX = xPos + xMove[i];
if (nextY >= 0 && nextY < N && nextX >= 0 && nextX < M) {
if (!visited[nextY][nextX] && graph[nextY][nextX]) {
visited[nextY][nextX] = true;
queue.push({ yPos: nextY, xPos: nextX });
}
}
}
}
};
let count = 0;
for (let i = 0; i < N; i++) {
for (let j = 0; j < M; j++) {
if (!visited[i][j] && graph[i][j]) {
count++;
bfs(i, j);
}
}
}
console.log(count);
};
바로 전 문제보다 코드가 더 깔끔해지지 않았나?
이제는 javascript로도 코드를 어느 정도 정립해 가는 거 같다. Cpp보다 코드가 특별히 더 길어지지 않게.
1년 전에 막 코딩을 처음 시작했을 땐, 알고리즘이 프로그래밍의 전부인 양 공부했다. 그래서 하루 종일 문제만 풀었다.
이 문제도 내가 많이 고전했었던 문제인 거 같다. 그 때는 bfs, dfs가 뭔지도 모르고 이 문제에 도전했으니...
결국 풀기야 풀었는데, 다시 풀려다가 포기했던 문제였던 거 같다.
그런데 언어를 바꾼 지금은, 프로그래밍 경험이 쌓여서인지, 오랜만에 알고리즘을 하는 데도 한 번에 풀었다.
참 기분이 좋아진다.
아! 이전에는 dfs로 풀었었는데, 이번에는 bfs로 풀었다.
dfs로 하다가는 javascript에서 스택이 초과될까봐 무섭다. 그래서 dfs는 잘 못하겠다. 원래 dfs를 더 즐겨 사용했는데도.
반응형
'프로그래밍 > 알고리즘 풀이' 카테고리의 다른 글
[node.js] 버블 소트 ( 백준 1377번 ) (0) | 2021.04.11 |
---|---|
[node.js] 미로 탐색 ( 백준 2178번 ) (0) | 2021.04.10 |
[node.js] 단지번호붙이기 ( 백준 2667번 ) (0) | 2021.04.10 |
[node.js] 이분 그래프 ( 백준 1707번 ) (0) | 2021.04.09 |
[node.js] 주사위 게임 ( 백준 10103번 ) (0) | 2021.04.09 |