(Java) 백준 7569 - 토마토

2022. 6. 8. 02:05·코딩 테스트

7576 문제에서 높이인 H값이 추가된 문제이다.

x,y 값에 z값까지 더해 탐색하면 된다.

3차원 배열을 생성해 입력값을 배열에 넣어주었고

dz 배열을 생성해 상하좌우앞뒤를 모두 탐색할수 있게 했다.


최종 코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {
    static int m, n, h;
    static int arr[][][];
    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 Queue<int[]> queue = new LinkedList<>();

    public static void main(String[] args) throws Exception {
        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());

        // 입력값 배열 삽입
        arr = 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++) {
                    arr[i][j][k] = Integer.parseInt(st.nextToken());
                    if(arr[i][j][k] == 1) {
                        queue.offer(new int[]{i, j, k});
                    }
                }
            }
        }
        // bfs 실행
        System.out.println(bfs());
    }
    static int bfs() {
        while (!queue.isEmpty()) {
            int[] temp = queue.poll();
            int nowZ = temp[0];
            int nowY = temp[1];
            int nowX = temp[2];
            // 상하좌우앞뒤 탐색
            for (int i = 0; i < 6; i++) {
                int nextZ = nowZ + dz[i];
                int nextY = nowY + dy[i];
                int nextX = nowX + dx[i];

                // 범위 안에 있다면
                if(nextZ >= 0 && nextY >= 0 && nextX >= 0 &&
                nextZ < h && nextY < n && nextX < m) {
                    // 익지 않은 토마토가 있다면
                    if(arr[nextZ][nextY][nextX] == 0) {
                        queue.offer(new int[] {nextZ, nextY, nextX});
                        arr[nextZ][nextY][nextX] = arr[nowZ][nowY][nowX] + 1;
                    }
                }
            }
        }
        // 반환값 변수
        int value = 0;
        // 완성된 배열 탐색
        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;
                    value = Math.max(value, arr[i][j][k]);
                }
            }
        }
        // 최댓값이 1이라면 모든 토마토가 익은 상태로 입력된것
        if(value == 1) return 0;
        // 반환전 1 빼주기
        return value - 1;
    }
}

'코딩 테스트' 카테고리의 다른 글

(Java) 백준 1764 - 듣보잡  (0) 2022.06.09
(Java) 백준 1697 - 숨바꼭질  (0) 2022.06.08
(Java) 백준 7576 - 토마토  (0) 2022.06.06
(Java) 백준 17626 - Four Squares  (0) 2022.06.04
(Java) 백준 11279 - 최대 힙  (0) 2022.06.04
'코딩 테스트' 카테고리의 다른 글
  • (Java) 백준 1764 - 듣보잡
  • (Java) 백준 1697 - 숨바꼭질
  • (Java) 백준 7576 - 토마토
  • (Java) 백준 17626 - Four Squares
로승리
로승리
Roy's Blog로승리 님의 블로그입니다.
  • 로승리
    Roy's Blog
    로승리
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Issuefy
      • Language
      • Spring
      • Database
      • Network
      • Kubernetes
      • AWS
      • YAPP
      • 코드스쿼드
      • 코딩 테스트
      • 생각정리
      • 국비지원
      • 회고
      • 컨퍼런스, 세미나
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
로승리
(Java) 백준 7569 - 토마토
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.