Skip to content

Commit

Permalink
#18 23.10.28 > 2 > 유기농배추 다시풀기
Browse files Browse the repository at this point in the history
  • Loading branch information
beurmuz committed Oct 27, 2023
1 parent 27da7b9 commit 7c5d1ee
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 15 deletions.
2 changes: 1 addition & 1 deletion src/bj/silver/2/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

| | 문제번호 | 문제명 | 응시 날짜 | 채점 결과 | 재응시 |
| :-: | :------: | :--------------------------------------- | :-------: | :---------------------------: | :---------------------------: |
| 1 | 1012 | [유기농 배추](./1012.js) | 22.08.06 | X | [23.01.06](./replay/1012.js) |
| 1 | 1012 | [유기농 배추](./1012.js) | 22.08.06 | X | [23.10.28](./replay/1012.js) |
| 2 | 1260 | [DFS와 BFS](./1260.js) | 22.08.08 | [22.10.07](./1260_re.js) | [23.01.09](./replay/1260.js) |
| 3 | 1138 | [한 줄로 서기](./1138.js) | 22.08.09 | [22.08.13](./1138_re.js) |
| 4 | 1912 | [연속합](./1912.js) | 22.08.10 | [22.08.14](./1912_re.js) |
Expand Down
34 changes: 20 additions & 14 deletions src/bj/silver/2/replay/1012.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
"use strict";

/**
* [DFS 문제]
* - 덩어리를 찾는 문제는 DFS로 풀 수 있다.
* - 단, 이때 dfs 함수 내에는 따로 해당 함수를 탈출하는 조건이 필요없다. 대신 방문 여부를 체크할 배열이 따로 필요하다.
*/

const input = require("fs")
.readFileSync("/dev/stdin")
.toString()
Expand All @@ -12,21 +18,21 @@ function solution(input, T) {

for (let t = 0; t < T; t++) {
let answer = 0;
let [m, n, k] = input[p].split(" ").map((v) => +v);
let graph = Array.from({ length: m }, () => Array(n).fill(0)); // 배추 지도
let visited = Array.from({ length: m }, () => Array(n).fill(0)); // 방문 여부 체크 지도
let [M, N, K] = input[p].split(" ").map((v) => +v);
let graph = Array.from({ length: M }, () => Array(N).fill(0)); // 배추 지도
let checked = Array.from({ length: M }, () => Array(N).fill(false)); // 방문여부 체크

// 현재 p(시작점)값을 tmp에 저장
let start = p;

// 들어온 input값으로 배추를 심는다.
for (p = p + 1; p <= start + k; p++) {
for (p = p + 1; p <= start + K; p++) {
let [x, y] = input[p].split(" ");
graph[x][y] = 1;
}

const dfs = (x, y) => {
visited[x][y] = 1; // 그 지점에 오는 순간 방문처리를 한다.
checked[x][y] = 1;
let dx = [-1, 0, 1, 0];
let dy = [0, 1, 0, -1];

Expand All @@ -36,10 +42,10 @@ function solution(input, T) {

if (
nx >= 0 &&
nx < m &&
ny >= 0 &&
ny < n &&
visited[nx][ny] === 0 &&
nx < M &&
ny < N &&
!checked[nx][ny] &&
graph[nx][ny] === 1
) {
dfs(nx, ny);
Expand All @@ -48,12 +54,12 @@ function solution(input, T) {
};

// m x n 그래프에서 배추의 개수 세기
for (let x = 0; x < m; x++) {
for (let y = 0; y < n; y++) {
if (graph[x][y] === 1 && visited[x][y] === 0) {
// 배추가 있고, 아직 방문을 안했다면
dfs(x, y); // 깊이 우선 탐색 시작!
answer++; // 찾고 나오면 answer의 갯수를 한 개 늘린다.
for (let x = 0; x < M; x++) {
for (let y = 0; y < N; y++) {
if (graph[x][y] === 1 && !checked[x][y]) {
// 배추가 심어져있고, 아직 방문하지 않았다면
dfs(x, y); // 깊이우선 탐색 시작!
answer++; // 덩어리를 찾았으니 벌레 개수 1개 증가
}
}
}
Expand Down

0 comments on commit 7c5d1ee

Please sign in to comment.