[JAVA / 자바] 백준 7576번_토마토

2023. 12. 31. 21:25·Algorithm/Beakjoon
반응형

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

 

7576번: 토마토

첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토

www.acmicpc.net


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    static int N, M;
    static int[][] storage;
    static int[] dx = {0, -1, 0, 1};
    static int[] dy = {1, 0, -1, 0};
    static Queue<Tomato> queue = 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());
        storage = new int[N][M];
        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            for (int j = 0; j < M; j++) {
                storage[i][j] = Integer.parseInt(st.nextToken());
                if(storage[i][j] == 1){
                    queue.add(new Tomato(i, j));
                }
            }
        }
        bfs();
        int ans = 1;
        loopA:
        for (int[] tomatoes : storage) {
            for (int t : tomatoes) {
                if(t == 0){
                    ans = 0;
                    break loopA;
                }
                ans = Math.max(ans, t);
            }
        }
        System.out.println(ans - 1);
    }

    private static void bfs() {
        while (!queue.isEmpty()) {
            Tomato now = queue.poll();
            for (int i = 0; i < 4; i++) {
                int nx = now.x + dx[i];
                int ny = now.y + dy[i];
                if (nx >= 0 && nx < N && ny >= 0 && ny < M && storage[nx][ny] == 0) {
                    storage[nx][ny] = storage[now.x][now.y] + 1;
                    queue.add(new Tomato(nx, ny));
                }
            }
        }
    }

    private static class Tomato {
        int x;
        int y;
         Tomato(int x, int y) {
            this.x = x;
            this.y = y;
        }
    }
}

💡 BFS

풀이

  • BFS 활용해 가능한 모든 토마토 탐색
  • 토마토 객체 정의 (필드 = x좌표, y좌표, 익은 날짜(1 시작 기준))
  • bfs가 끝난 후, storage 배열 전체 탐색하며 0있는지 검사
    • 0이 존재한다면 토마토가 모두 익지 못하는 상태 => -1 리턴
    • 0 제외, 존재하는 값 중 최대 값 -1 출력

🔽연관 문제

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

 

7569번: 토마토

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

www.acmicpc.net

 

반응형

'Algorithm > Beakjoon' 카테고리의 다른 글

[JAVA] 백준 18870번 : 좌표 압축  (0) 2024.01.01
[JAVA] 백준 10026번 : 적록색약  (1) 2024.01.01
[JAVA / 자바] 백준 9095번_1, 2, 3 더하기  (0) 2023.12.30
[JAVA / 자바] 백준 11047번_동전 0  (0) 2023.12.30
[JAVA / 자바] 백준 11399번_ATM  (1) 2023.12.29
'Algorithm/Beakjoon' 카테고리의 다른 글
  • [JAVA] 백준 18870번 : 좌표 압축
  • [JAVA] 백준 10026번 : 적록색약
  • [JAVA / 자바] 백준 9095번_1, 2, 3 더하기
  • [JAVA / 자바] 백준 11047번_동전 0
mopipi
mopipi
칠전팔기
mopipi
공부하는 사람
mopipi
전체
오늘
어제
  • 분류 전체보기 (162)
    • Java (4)
    • Spring (21)
      • Spring boot 입문 (16)
      • [dsc] Spring-Novice-Study (3)
    • SQL (5)
    • Algorithm (127)
      • Programmars (38)
      • Beakjoon (85)
    • Git (1)
    • 생각들 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

hELLO· Designed By정상우.v4.5.2
mopipi
[JAVA / 자바] 백준 7576번_토마토

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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