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 |
Tags
- BOJ
- 프레임워크
- Spring
- 단위테스트
- Database
- Algorithm
- 우아한형제들
- Vue
- 웹프로그래밍
- BFS
- Backtracking
- SQL
- springboot
- 알고리즘
- codeground
- JavaScript
- mobx
- TypeScript
- BAEKJOON
- 데이터베이스
- framework
- JPA
- 우아한테크캠프
- 연습문제
- DFS
- react
- Java
- Vue.js
- 백준
- 탐색알고리즘
Archives
- Today
- Total
설모의 기록
[백준 1012] 유기농 배추 본문
이 문제는 전형적인 bfs, dfs 문제로 배열을 돌면서 값이 1인 그룹이 몇개가 있는지를 출력하는 문제입니다. 아래의 코드는 bfs로 푼 문제입니다. 그룹의 개수가 배추흰지렁이의 최소한의 마리수입니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.*; | |
import java.util.*; | |
public class boj1012 { | |
static int M, N, K; | |
static boolean[][] visited, field; | |
static int[] dx = {1, -1, 0, 0}, dy = {0, 0, 1, -1}; | |
public static void main (String[] args) throws IOException { | |
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); | |
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); | |
StringTokenizer st; | |
int T = Integer.parseInt(br.readLine()); | |
for (int i = 0; i < T; i++) { | |
st = new StringTokenizer(br.readLine()); | |
M = Integer.parseInt(st.nextToken()); | |
N = Integer.parseInt(st.nextToken()); | |
K = Integer.parseInt(st.nextToken()); | |
visited = new boolean[M][N]; | |
field = new boolean[M][N]; | |
for (int j = 0; j < K; j++) { | |
st = new StringTokenizer(br.readLine()); | |
field[Integer.parseInt(st.nextToken())][Integer.parseInt(st.nextToken())] = true; | |
} | |
int count = 0; | |
for (int x = 0; x < M; x++) { | |
for (int y = 0; y < N; y++) { | |
if (field[x][y] && !visited[x][y]) { | |
bfs(x, y); | |
count++; | |
} | |
} | |
} | |
bw.write(count + "\n"); | |
} | |
bw.flush(); | |
br.close(); | |
} | |
private static void bfs (int x, int y) { | |
Queue<Node> q = new LinkedList<>(); | |
q.add(new Node(x, y)); | |
visited[x][y] = true; | |
while (!q.isEmpty()) { | |
Node node = q.poll(); | |
for (int i = 0; i < 4; i++) { | |
int sx = node.x + dx[i]; | |
int sy = node.y + dy[i]; | |
if (sx >= 0 && sx < M && sy >= 0 && sy < N && !visited[sx][sy] && field[sx][sy]) { | |
visited[sx][sy] = true; | |
q.add(new Node(sx, sy)); | |
} | |
} | |
} | |
} | |
} | |
class Node { | |
int x, y; | |
Node(int x, int y) { | |
this.x = x; | |
this.y = y; | |
} | |
} |
'알고리즘' 카테고리의 다른 글
[백준 1600] 말이 되고픈 원숭이 (0) | 2018.05.06 |
---|---|
[백준1987] 알파벳 (0) | 2018.05.04 |
[백준 14919] 분포표 만들기 (0) | 2018.05.02 |
[백준 6603] 로또 (0) | 2018.05.02 |
[백준 1389] 케빈 베이컨의 6단계 법칙 (0) | 2018.05.02 |