[BOJ][Java] 16236. ์•„๊ธฐ ์ƒ์–ด

2025. 10. 1. 11:47ยท๐Ÿ’ญ Problem Solving/Java

๋ฌธ์ œ

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

 

๋ฌธ์ œ ์ดํ•ด

  • N×N ๊ณต๊ฐ„: ๋นˆ ์นธ(0), ๋ฌผ๊ณ ๊ธฐ(1~6), ์ƒ์–ด(9)
  • ์ƒ์–ด์˜ ํฌ๊ธฐ: 2.
  • ์ƒ์–ด๋Š” ์ž์‹ ์˜ ํฌ๊ธฐ๋ณด๋‹ค ์ž‘์€ ๋ฌผ๊ณ ๊ธฐ๋งŒ ๋จน์„ ์ˆ˜ ์žˆ๊ณ , ์ž์‹ ์˜ ํฌ๊ธฐ์™€ ๊ฐ™๊ฑฐ๋‚˜ ์ž‘์€ ์นธ์€ ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๋Š”๋‹ค.
    • ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ™์œผ๋ฉด ๊ฐ€์žฅ ์œ„(ํ–‰์ด ์ž‘์€) ๋ฌผ๊ณ ๊ธฐ
    • ๊ทธ๋‹ค์Œ ๊ฐ€์žฅ ์™ผ์ชฝ(์—ด์ด ์ž‘์€) ๋ฌผ๊ณ ๊ธฐ
  • ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ž์‹ ์˜ ํฌ๊ธฐ๋งŒํผ ๋จน์œผ๋ฉด ํฌ๊ธฐ๊ฐ€ 1 ์ฆ๊ฐ€
  • ๋” ์ด์ƒ ๋จน์„ ์ˆ˜ ์—†์„ ๋•Œ๊นŒ์ง€ ์ด๋™ํ•œ ์ด ์‹œ๊ฐ„(=์ด๋™ ์นธ ์ˆ˜ ํ•ฉ) ์„ ๊ตฌํ•œ๋‹ค.

 

์•„์ด๋””์–ด

  1. ์ตœ๋‹จ๊ฑฐ๋ฆฌ ํƒ์ƒ‰: BFS
  2. ๊ฑฐ๋ฆฌ → ํ–‰ → ์—ด ์šฐ์„ ์ˆœ์œ„: ์šฐ์„ ์ˆœ์œ„ ํ

 

๊ตฌํ˜„

์ƒํƒœ

  • curSize : ํ˜„์žฌ ์ƒ์–ด ํฌ๊ธฐ(์ดˆ๊ธฐ 2)
  • cnt : ํ˜„์žฌ ํฌ๊ธฐ์—์„œ ๋จน์€ ๋ฌผ๊ณ ๊ธฐ ์ˆ˜(ํฌ๊ธฐ๋งŒํผ ๋จน์œผ๋ฉด ์ฆ๊ฐ€)
  • time : ๋ˆ„์  ์ด๋™ ์‹œ๊ฐ„
  • ๋ฐฉ๋ฌธ ๋ฐฐ์—ด๊ณผ ํ๋Š” ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์„ ๋•Œ๋งˆ๋‹ค ์ดˆ๊ธฐํ™”
    → ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์€ ํ›„, ๊ทธ ์ž๋ฆฌ์—์„œ ๋‹ค์Œ์— ๋จน์„ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์„ ๋ฐ˜๋ณตํ•˜๊ธฐ ๋•Œ๋ฌธ.

 

ํƒ์ƒ‰

  • ํ˜„์žฌ ์œ„์น˜์—์„œ 4๋ฐฉํ–ฅ ํƒ์ƒ‰
    • ๊ฒฉ์ž ๋ฐ– / ์ด๋ฏธ ๋ฐฉ๋ฌธ / ์ƒ์–ด๋ณด๋‹ค ํฐ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์žˆ๋Š” ์นธ(map[nr][nc] > curSize) ์€ ๊ฑด๋„ˆ๋›ด๋‹ค.
    • ๋„์ฐฉ ์นธ์— ๋จน์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์žˆ์œผ๋ฉด(0 < map[nr][nc] < curSize), ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๋Š”๋‹ค.
      • ๋นˆ ์นธ์œผ๋กœ ๊ฐฑ์‹ : map=0
      • ๋ฌผ๊ณ ๊ธฐ๊นŒ์ง€ ์ด๋™ํ•œ ์‹œ๊ฐ„์„ ๋ˆ„์ : time += cur.time
      • ํ˜„์žฌ ์œ„์น˜๋ฅผ ๊ทธ ์นธ์œผ๋กœ ๊ฐฑ์‹ : r = cur.r c = cur.c
      • ๋จน์€ ๊ฐœ์ˆ˜ ์ฆ๊ฐ€: cnt++
    • ๋งŒ์•ฝ ํ˜„์žฌ ํฌ๊ธฐ๋งŒํผ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์—ˆ์œผ๋ฉด, ํฌ๊ธฐ ์ฆ๊ฐ€: if (cnt == curSize) curSize++
  • ๋‹ค์Œ ๋ฌผ๊ณ ๊ธฐ ํƒ์ƒ‰
  • ์šฐ์„ ์ˆœ์œ„ ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋จน์€ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์—†์œผ๋ฉด, ๋”์ด์ƒ ๋จน์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ข…๋ฃŒ

 

์ฝ”๋“œ

import java.util.*;
import java.io.*;

public class Main {
    static class Point {
        int r, c, time;

        public Point(int r, int c, int time) {
            this.r = r;
            this.c = c;
            this.time = time;
        }
    }

    static int n;
    static int[][] map;

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

        n = Integer.parseInt(br.readLine());
        map = new int[n][n];
        int curR = 0, curC = 0;

        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            for (int j = 0; j < n; j++) {
                map[i][j] = Integer.parseInt(st.nextToken());
                if (map[i][j] == 9) {
                    curR = i;
                    curC = j;
                    map[i][j] = 0;
                }
            }
        } // ์ž…๋ ฅ ๋

        System.out.println(bfs(curR, curC));
    }

    static int bfs(int r, int c) {
        int time = 0, cnt = 0, curSize = 2; // ์ด ์‹œ๊ฐ„, ๋จน์€ ๋ฌผ๊ณ ๊ธฐ ์ˆ˜, ํ˜„์žฌ ์ƒ์–ด ํฌ๊ธฐ
        int[] dr = { -1, 1, 0, 0 };
        int[] dc = { 0, 0, -1, 1 };

        while (true) {
            PriorityQueue<Point> pq = new PriorityQueue<>(
                    (p1, p2) -> p1.time != p2.time ? Integer.compare(p1.time, p2.time)
                            : (p1.r != p2.r ? Integer.compare(p1.r, p2.r) : Integer.compare(p1.c, p2.c)));
            boolean[][] visited = new boolean[n][n];
            boolean eat = false; // ๋จน์—ˆ๋Š”์ง€ ์—ฌ๋ถ€

            pq.offer(new Point(r, c, 0));
            visited[r][c] = true;

            while (!pq.isEmpty()) {
                Point cur = pq.poll();

                if (map[cur.r][cur.c] != 0 && map[cur.r][cur.c] < curSize) { // ๋ฌผ๊ณ ๊ธฐ ๋จน์„ ์ˆ˜ ์žˆ์Œ
                    map[cur.r][cur.c] = 0;
                    time += cur.time;
                    r = cur.r;
                    c = cur.c;
                    eat = true;
                    cnt++;
                    break;
                }

                for (int i = 0; i < 4; i++) {
                    int nr = cur.r + dr[i];
                    int nc = cur.c + dc[i];

                    if (nr < 0 || nc < 0 || nr >= n || nc >= n || visited[nr][nc] || map[nr][nc] > curSize)
                        continue;

                    pq.offer(new Point(nr, nc, cur.time + 1));
                    visited[nr][nc] = true;
                }

            }

            if (!eat)
                break;

            if (cnt == curSize) {
                cnt = 0;
                curSize++;
            }
        }

        return time;
    }
}

 

'๐Ÿ’ญ Problem Solving > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ][Java] 21608. ์ƒ์–ด ์ดˆ๋“ฑํ•™๊ต  (3) 2025.10.21
[BOJ][Java] 20056. ๋งˆ๋ฒ•์‚ฌ ์ƒ์–ด์™€ ํŒŒ์ด์–ด๋ณผ  (0) 2025.10.15
[BOJ][Java] 2533. ์‚ฌํšŒ๋ง ์„œ๋น„์Šค(SNS)  (0) 2025.09.24
[BOJ][Java] 15486. ํ‡ด์‚ฌ 2  (0) 2025.09.15
[BOJ][Java] 16930. ๋‹ฌ๋ฆฌ๊ธฐ  (4) 2025.09.09
'๐Ÿ’ญ Problem Solving/Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [BOJ][Java] 21608. ์ƒ์–ด ์ดˆ๋“ฑํ•™๊ต
  • [BOJ][Java] 20056. ๋งˆ๋ฒ•์‚ฌ ์ƒ์–ด์™€ ํŒŒ์ด์–ด๋ณผ
  • [BOJ][Java] 2533. ์‚ฌํšŒ๋ง ์„œ๋น„์Šค(SNS)
  • [BOJ][Java] 15486. ํ‡ด์‚ฌ 2
0=2.
0=2.
  • 0=2.
    0=2
    0=2.
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (104)
      • ๐Ÿ“‚ Project (2)
        • Paint the City (2)
      • ๐Ÿ’ญ Problem Solving (42)
        • C++ (28)
        • Java (14)
      • ๐Ÿ“ Study (17)
        • React (1)
        • Java (16)
      • ๐Ÿ’ป CS (11)
        • ๋ฉด์ ‘์„ ์œ„ํ•œ CS ์ „๊ณต์ง€์‹ ๋…ธํŠธ (2)
        • ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ (9)
      • ๐Ÿƒ‍โ™€๏ธ Activities (32)
        • Web Front-End Basic Study (6)
        • 42 Cursus (26)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
    • ๊ธ€์“ฐ๊ธฐ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    github
    BFS
    C
    git
    unity
    ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ
    CSS
    ์‹œ๋ฎฌ๋ ˆ์ด์…˜
    ๋งต
    react
    knapsack
    ์ •๋ ฌ
    dynamic programming
    dfs
    ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜
    CS
    La Piscine
    ํŠธ๋ฆฌ
    ๋ฐฑ์ค€
    ๋ฐฑํŠธ๋ž˜ํ‚น
    HTML
    .h
    42๊ฒฝ์‚ฐ
    VR
    ๋ธŒ๋ฃจํŠธํฌ์Šค
    makefile
    ๊ตฌํ˜„
    java
    swea
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
0=2.
[BOJ][Java] 16236. ์•„๊ธฐ ์ƒ์–ด
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”