코드굽는 타자기
Baekjoon[7569] - 토마토 본문
링크
Baekjoon[7569]
문제설명
- BFS
문제풀이
- BFS
문제코드
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Scanner;
import java.util.StringTokenizer;
public class Main7569 {
public static int[][] dir = {
{0,0,1},
{0,0,-1},
{0,1,0},
{0,-1,0},
{1,0,0},
{-1,0,0}
};
public static void main(String[] args) throws IOException {
System.setIn(new FileInputStream("res/baekjoon/7569.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
// 입력
int C = Integer.parseInt(st.nextToken());
int R = Integer.parseInt(st.nextToken());
int H = Integer.parseInt(st.nextToken());
int[][][] map = new int[H][R][C];
int ans=0;
for (int i = 0; i < H; i++) {
for (int j = 0; j < R; j++) {
st = new StringTokenizer(br.readLine());
for (int k = 0; k < C; k++) {
map[i][j][k] = Integer.parseInt(st.nextToken());
}
}
}
// BFS탐색
LinkedList<int[]> q = new LinkedList<>();
// 초기 토마토 위치
for (int i = 0; i < H; i++) {
for (int j = 0; j < R; j++) {
for (int k = 0; k < C; k++) {
if(map[i][j][k]==1) {
q.add(new int[] {i,j,k});
}
}
}
}
// BFS
int qsize;
int[] now;
int nh;
int nr;
int nc;
while(!q.isEmpty()) {
qsize = q.size();
for (int i = 0; i < qsize; i++) {
now = q.poll();
for (int d = 0; d < 6; d++) {
nh = now[0] + dir[d][0];
nr = now[1] + dir[d][1];
nc = now[2] + dir[d][2];
// 경계 안에서 다음 토마토가 익을 수 있을 때,
if(nh>=0 && nh<H && nr>=0 && nr<R && nc>=0 && nc<C && map[nh][nr][nc]==0) {
map[nh][nr][nc]=1;
q.add(new int[] {nh,nr,nc});
}
}
}
ans++;
}
ans--;
top:
for (int i = 0; i < H; i++) {
for (int j = 0; j < R; j++) {
for (int k = 0; k < C; k++) {
if(map[i][j][k]==0) {
ans=-1;
break top;
}
}
}
}
System.out.println(ans);
// 초기화
}
}
아쉬운점
- BFS할때 visit 처리안했음
잘한점
- 3차원 입력받음
- BFS함
다른풀이
- 퍼질 때 1씩 더한 값을 넣어주면 최대값이 시간이다
'알고리즘 > 깊이&너비 우선 탐색(DFS&BFS)' 카테고리의 다른 글
Baekjoon[1260] - DFS와 BFS (0) | 2020.02.18 |
---|---|
SWEA[2117] - 홈 방범 서비스 (0) | 2020.02.18 |
Baekjoon[17471] - 게리맨더링 (0) | 2020.02.14 |
SWEA[1861] - 정사각형 방[D4] (0) | 2020.02.13 |
SWEA[1949] - 등산로 조성 (0) | 2020.02.11 |
Comments