Skip to content

Commit 029935e

Browse files
committed
add: 백준/유기농배추(1012)
1 parent 6774895 commit 029935e

1 file changed

Lines changed: 106 additions & 0 deletions

File tree

boj/1012.js

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
const fs = require('fs');
2+
const stdin = (process.platform === 'linux'
3+
? fs.readFileSync('/dev/stdin').toString().trim()
4+
: `2
5+
10 8 17
6+
0 0
7+
1 0
8+
1 1
9+
4 2
10+
4 3
11+
4 5
12+
2 4
13+
3 4
14+
7 4
15+
8 4
16+
9 4
17+
7 5
18+
8 5
19+
9 5
20+
7 6
21+
8 6
22+
9 6
23+
10 10 1
24+
5 5
25+
`
26+
).split('\n');
27+
28+
const input = (() => {
29+
let line = 0;
30+
return () => stdin[line++];
31+
})();
32+
33+
let answer = [];
34+
35+
const T = parseInt(input());
36+
37+
const dx = [0, 0, -1, 1];
38+
const dy = [1, -1, 0, 0];
39+
40+
for (let i = 0; i < T; i++) {
41+
const [M, N, K] = input()
42+
.split(' ')
43+
.map((each) => parseInt(each));
44+
45+
let farm = Array(N)
46+
.fill()
47+
.map(() => Array(M).fill(0));
48+
let visited = Array(N)
49+
.fill()
50+
.map(() => Array(M).fill(false));
51+
52+
for (let j = 0; j < K; j++) {
53+
const [X, Y] = input()
54+
.split(' ')
55+
.map((each) => parseInt(each));
56+
farm[Y][X] = 1;
57+
}
58+
59+
60+
function dfs(x, y) {
61+
for (let i = 0; i < 4; i++) {
62+
let setY = y + dy[i];
63+
let setX = x + dx[i];
64+
65+
if (setX < 0 || setY < 0 || M <= setX || N <= setY) {
66+
continue;
67+
}
68+
69+
if (!farm[setY][setX] || visited[setY][setX]) {
70+
continue;
71+
}
72+
visited[setY][setX] = true;
73+
dfs(setX, setY);
74+
}
75+
}
76+
77+
let count = 0;
78+
for (let row = 0; row < N; row++) {
79+
for (let col = 0; col < M; col++) {
80+
if (farm[row][col] === 1 && !visited[row][col]) {
81+
count++;
82+
dfs(col, row);
83+
}
84+
}
85+
}
86+
87+
answer.push(count);
88+
}
89+
90+
answer.forEach((e) => console.log(e));
91+
92+
/*
93+
94+
## How
95+
input 관련해서 헷갈리는 부분이 있어 래준님 코드를 참고하여 깔끔하게 처리할 수 있었다.
96+
97+
DFS, BFS 모두 사용하여 풀 수 있는 문제이다. 나는 DFS를 사용했다.
98+
99+
농장을 순회하면서 배추를 발견하고 방문하지 않았다면 위, 아래, 왼쪽, 오른쪽을 각각 검사하여 배추가 존재하는 경우 방문된 것으로 처리한 뒤 탐색이 끝나면 count를 1 증가시켰다.
100+
101+
방문하지 않은 배추가 없을 때 까지 이를 반복하고 count를 출력하면 정답이다.
102+
103+
## Retrospective
104+
자바스크립트로 처음 도전한 백준 문제였는데 input 관련한 코드 템플릿을 제공받을 수 있어서 이것에 대해 고민하고 적용하는 시간을 줄일 수 있었다. 동균님에게 감사하다.
105+
106+
*/

0 commit comments

Comments
 (0)