Park DJ
dj0998
Park DJ
전체 방문자
오늘
어제
  • 분류 전체보기 (363)
    • 백준 (363)

공지사항

인기 글

태그

  • 백준 2591
  • 백준 15961
  • 백준 6550
  • 백준 1064
  • 백준 3135
  • 백준 2343
  • 백준 1011
  • 백준 1531
  • 백준 12871
  • 백준 8892
  • 백준 2225
  • 백준 7662
  • 백준 16926
  • 자바
  • 백준 1495
  • 백준 3049
  • 백준 24039
  • 백준
  • 백준 1747
  • 백준 14582
  • Java
  • 백준 12605
  • 백준 7567
  • 백준 15655
  • 백준 1914
  • 백준 16194
  • 백준 4659
  • 백준 15312
  • 백준 10709
  • 백준 2467
hELLO · Designed By 정상우.
Park DJ

dj0998

백준 7569 토마토(Java)
백준

백준 7569 토마토(Java)

2023. 2. 26. 17:02

https://www.acmicpc.net/problem/7569

 

7569번: 토마토

첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100,

www.acmicpc.net


 

Java 코드

 


import java.util.Scanner;
import java.util.Queue;
import java.util.LinkedList;

public class Main {

  static int m, n, h;
  static int[] dx = {1, -1, 0, 0, 0 ,0};
  static int[] dy = {0, 0, -1, 1, 0, 0};
  static int[] dz = {0, 0, 0, 0, 1, -1};
  static int[][][] arr;
  static Queue<int[]> q = new LinkedList<>();

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    m = sc.nextInt();
    n = sc.nextInt();
    h = sc.nextInt();

    arr = new int[h][n][m];
    
    for(int i = 0; i < h; i++) {
      for(int j = 0; j < n; j++) {
        for(int k = 0; k < m; k++) {
          arr[i][j][k] = sc.nextInt();
          if(arr[i][j][k] == 1) q.add(new int[] {i, j, k});
        }
      }
    }

    int result = bfs();

    System.out.println(result);
  }

  public static int bfs() {
    while(!q.isEmpty()) {
      int[] num = q.poll();
      int c = num[0];
      int a = num[1];
      int b = num[2];

      for(int i = 0; i < 6; i++) {
        int x = a + dx[i];
        int y = b + dy[i];
        int z = c + dz[i];
        
        if(x >= 0 && y >= 0 && z >= 0 && x < n && y < m && z < h && arr[z][x][y] == 0) {
          arr[z][x][y] = arr[c][a][b] + 1;
          q.add(new int[] {z, x, y});
        }
      }
    }

    int max = -1;

    for(int i = 0; i < h; i++) {
      for(int j = 0; j < n; j++) {
        for(int k = 0; k < m; k++) {
          if(arr[i][j][k] == 0) return -1;
          max = Math.max(max, arr[i][j][k]);
        }
      }
    }
    return max - 1;
  }
}

'백준' 카테고리의 다른 글

백준 1759 암호 만들기(Java)  (0) 2023.02.26
백준 9251 LCS(Java)  (0) 2023.02.26
백준 10026 적록색약(Java)  (0) 2023.02.25
백준 15312 이름 궁합(Java)  (0) 2023.02.25
백준 1011 Fly me to the Alpha Centauri(Java)  (0) 2023.02.24
    '백준' 카테고리의 다른 글
    • 백준 1759 암호 만들기(Java)
    • 백준 9251 LCS(Java)
    • 백준 10026 적록색약(Java)
    • 백준 15312 이름 궁합(Java)
    Park DJ
    Park DJ

    티스토리툴바