🐣 알고리즘 삐약/💻 백준 삐약

62 삐약 : 백준 7569| 토마토 [바킹독 문제 풀이|BFS|JAVA]

우주수첩 2024. 6. 3. 21:11
728x90

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

 

package BKD_0x9_BFS;

import java.beans.Introspector;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class BOJ_7569 {
    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 M;
    static int N;
    static int H;
    static int[][][] box;
    static Queue<Tomato> q = new LinkedList<>();


    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        M = Integer.parseInt(st.nextToken());
        N = Integer.parseInt(st.nextToken());
        H = Integer.parseInt(st.nextToken());

        box = new int[H][N][M];

        for(int i=0;i<H;i++){
            for(int j=0;j<N;j++){
                st = new StringTokenizer(br.readLine());
                for(int k=0;k<M;k++){
                    box[i][j][k] = Integer.parseInt(st.nextToken());
                    if(box[i][j][k]==1) q.offer(new Tomato(j,k,i));
                }
            }
        }
        if(checkTomato()==1){
            System.out.println(0);
        }
        bfs();
    }

    public static void bfs(){
        while(!q.isEmpty()){
            Tomato t =q.poll();
            for(int i=0;i<6;i++){
                int nx = t.x + dx[i];
                int ny = t.y + dy[i];
                int nz = t.z + dz[i];



                if(nx>=0 && ny>=0 && nz>=0 && nz<H && nx<N && ny<M &&  box[nz][nx][ny]==0){

                    q.offer(new Tomato(nx,ny,nz));
                    box[nz][nx][ny]=box[t.z][t.x][t.y]+1;

                }
            }
        }

         System.out.println(checkTomato());

    }

    static int checkTomato(){
        int result = Integer.MIN_VALUE;
        for(int i=0;i<H;i++){
            for(int j=0;j<N;j++){
                for(int k=0;k<M;k++){
                    if(box[i][j][k]==0) return -1;
                    result = Math.max(box[i][j][k],result);
                }
            }
        }
        return result-1;

    }
    static class Tomato{
        int x;
        int y;
        int z;

        public Tomato(int x, int y, int z){
            this.x = x;
            this.y = y;
            this.z = z;
        }
    }

}

 

 

오늘의 교훈 : 문제를 잘 읽자.

데이터 입력되는 방식 잘못 이해하고 있다가 몇시간을 날린 사람이 여기 있따...

저번에는 토마토의 위치를 저장하는 객체에 day라는 인자를 선언했었는데 이번에는 다른 방법을 접해볼 수 있었다.

이유인 즉슨..

내 입력이 머가 잘못됐지 하고 코드를 찾아보다가 그리 되었따.... 엉엉...

 

참고 url : https://dragon-h.tistory.com/17

 

[백준 7569 : JAVA] 토마토 / BFS

개요 이 문제는 아래의 문제에서 배열만 3차원 배열로 변경된 문제이다. 아래 문제를 풀고 이 문제를 접근하면 쉽게 풀이할 수 있을 것이다. 2020/02/09 - [알고리즘/백준] - [백준 7576 : JAVA] 토마토 /

dragon-h.tistory.com

 

나는 멍청이 트윗트윗트윗트윗...

 

728x90