알고리즘/정보올림피아드
[정보올림피아드] 정올 2606 토마토(초) 풀이
2021. 10. 17. 14:43반응형
문제링크
http://jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=1867&sca=40
문제정의
코드
class Point {
int r; // row(행)
int c; // column(열)
int z; // height(높이)
int val; // 값
public Point() {
super();
// TODO Auto-generated constructor stub
}
public Point(int r, int c, int z, int val) {
super();
this.r = r;
this.c = c;
this.z = z;
this.val = val;
}
}
public class 정올_2606_토마토초_김키사이트 {
static int dir[][] = {
// 6방향
{-1, 0, 0}, // 상
{ 0, 1, 0}, // 우
{ 1, 0, 0}, // 하
{ 0,-1, 0}, // 좌
{0, 0, 1}, // up
{0, 0,-1} // down
};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Scanner sc = new Scanner(System.in);
int date = 0;
int C = sc.nextInt();
int R = sc.nextInt();
int H = sc.nextInt();
ArrayDeque<Point> aq = new ArrayDeque<Point>();
// 행 렬 높이
int[][][] map = new int[R+2][C+2][H+2];
for(int i = 0; i < R + 2; i++) {
for(int j = 0; j < C + 2; j++) {
Arrays.fill(map[i][j], 9); // 모든 값을 9로 채움.
}
}
for(int h = 1; h <= H; h++) {
for(int i = 1; i <= R; i++) {
for(int j = 1; j <= C; j++) {
map[i][j][h] = sc.nextInt();
}
}
}
// 사방에 0인거 검사 후 큐에 넣기
for(int h = 1; h <= H; h++) {
for(int i = 1; i <= R; i++) {
for(int j = 1; j <= C; j++) {
if(map[i][j][h] == 1)
aq.add(new Point(i,j,h,0));
}
}
}
while(!aq.isEmpty()) {
Point p = aq.poll();
date = p.val;
// 하나를 꺼내서 주위에 0이 있으면
// 그걸 담기전 1로 만들고
// 담는다.
for(int i = 0; i < 6; i++ ) {
int r = p.r + dir[i][0];
int c = p.c + dir[i][1];
int z = p.z + dir[i][2];
int val = p.val + 1;
if(map[r][c][z] == 0) {
map[r][c][z] = 1;
aq.add(new Point(r,c,z,val));
}
} // end of for
}
boolean isNOT = false;
loop: for (int h = 1; h <= H; h++) {
for (int i = 1; i <= R; i++) {
for (int j = 1; j <= C; j++) {
if(map[i][j][h] == 0) {
isNOT = true;
break loop;
}
}
}
}
if(isNOT) System.out.println("-1");
else System.out.println(date);
} // end of main
} // end of class
반응형
'알고리즘 > 정보올림피아드' 카테고리의 다른 글
[정보올림피아드] 정올 2247 도서관 풀이 (0) | 2021.10.20 |
---|---|
[정보올림피아드] 정올 2634 사냥꾼 풀이 (0) | 2021.10.20 |