[BOJ][Java] 16930. ๋‹ฌ๋ฆฌ๊ธฐ

2025. 9. 9. 14:11ยท๐Ÿ’ญ Problem Solving/Java

๋ฌธ์ œ

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

 

๋ฌธ์ œ ์ดํ•ด

  • N×M ์ฒด์œก๊ด€์— ๋นˆ ์นธ(.)๊ณผ ๋ฒฝ(#)์ด ์žˆ๋‹ค.
  • ํ•œ ๋ฒˆ ์ด๋™ํ•  ๋•Œ, ์ƒ·ํ•˜·์ขŒ·์šฐ ์ค‘ ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ 1์นธ ์ด์ƒ k์นธ ์ดํ•˜๋ฅผ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์‹œ์ž‘์ ์—์„œ ๋„์ฐฉ์ ๊นŒ์ง€ ์ด๋™ํ•˜๋Š” ์ตœ์†Œ ์‹œ๊ฐ„์„ ๊ตฌํ•œ๋‹ค.

 

๋ฌธ์ œ ํ’€์ด

BFS๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ ์นธ์— ๋„๋‹ฌํ•˜๋Š” ์ตœ์†Œ ์‹œ๊ฐ„์„ ๊ธฐ๋กํ•œ๋‹ค.
์ƒํ•˜์ขŒ์šฐ(dr, dc) ๋„ค ๋ฐฉํ–ฅ์— ๋Œ€ํ•ด 1..k์นธ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค.

 

์ƒํƒœ ์ •์˜

  • map[r][c] = -1: ๋ฏธ๋ฐฉ๋ฌธ, -2: ๋ฒฝ์œผ๋กœ ์ดˆ๊ธฐํ™”
  • BFS ํƒ์ƒ‰ํ•˜๋ฉด์„œ ํ•ด๋‹น ์นธ์— ๋„๋‹ฌํ•œ ์ตœ์†Œ ์‹œ๊ฐ„ ์ €์žฅ

 

ํƒ์ƒ‰ ์กฐ๊ฑด

  1. ๋ฏธ๋ฐฉ๋ฌธ: map[nr][nc] == -1
    ์ง€๊ธˆ์ด ์ฒ˜์Œ ๋„๋‹ฌ์ด๋ฏ€๋กœ map[nr][nc] = map[cur.r][cur.c] + 1๋กœ ๊ฐฑ์‹ ํ•˜๊ณ  ํ์— ๋„ฃ๋Š”๋‹ค.

  1. ์ด๋ฏธ ๋” ๋น ๋ฅธ ์‹œ๊ฐ„์— ๋„๋‹ฌ map[nr][nc] < map[cur.r][cur.c] + 1
    ์ด ์นธ์—๋Š” ํ˜„์žฌ ์‹œ๊ฐ„๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์ด๋ฏธ ์™”์œผ๋ฏ€๋กœ, ๊ทธ ๋’ค ์นธ๋“ค๋„ ์ด ๊ฒฝ๋กœ๋ณด๋‹ค ์ด๋“์ด ๋  ์ˆ˜ ์—†๋‹ค.
    → ์ด ๋ฐฉํ–ฅ ํƒ์ƒ‰์„ ์ค‘๋‹จํ•œ๋‹ค. (break)

  1. ๊ฐ™์€ ์‹œ๊ฐ„์œผ๋กœ ์ด๋ฏธ ๋ฐฉ๋ฌธ map[nr][nc] == map[cur.r][cur.c] + 1
    • ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋กœ ๊ฐ™์€ ์ด๋™ ์‹œ๊ฐ„์— ์ด๋ฏธ ํ์— ๋“ค์–ด๊ฐ”๋˜ ์นธ.
    • ๋‹ค์‹œ ํ์— ๋„ฃ์„ ํ•„์š”๋Š” ์—†๋‹ค.
    • ํ•˜์ง€๋งŒ ๊ทธ ๋’ค ์นธ์€ ์•„์ง ๋ฏธ๋ฐฉ๋ฌธ์ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ณ„์† ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.
      → ์ด๋ฒˆ ์นธ์€ ํŒจ์Šคํ•˜๊ณ  ๊ฐ™์€ ๋ฐฉํ–ฅ์˜ ๋‹ค์Œ ์นธ์œผ๋กœ ์ง„ํ–‰ (continue)

 

if (map[nr][nc] == -1) { // ๋ฏธ๋ฐฉ๋ฌธ
    q.offer(new Point(nr, nc));
    map[nr][nc] = map[cur.r][cur.c] + 1;
} else if (map[nr][nc] < map[cur.r][cur.c] + 1) { // ์ด๋ฏธ ํ˜„์žฌ ์‹œ๊ฐ„๋ณด๋‹ค ๋นจ๋ฆฌ ๋„์ฐฉ.
    break;
    } 
// map[nr][nc] == map[cur.r][cur.c] + 1 ์ด๋ฉด ๊ทธ๋ƒฅ ๋‹ค์Œ ์นธ ๊ณ„์†

 

4. ๋„์ฐฉ ์ขŒํ‘œ (er, ec)๋ฅผ ๋งŒ๋‚˜๋ฉด ์ฆ‰์‹œ `return`ํ•œ๋‹ค. (BFS์ด๋ฏ€๋กœ ๊ฐ€์žฅ ์ฒ˜์Œ ๋ฐฉ๋ฌธํ–ˆ์„ ๋•Œ๊ฐ€ ์ตœ์†Œ ์‹œ๊ฐ„)

 

์ฃผ์˜ ์‚ฌํ•ญ

๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฌ๊ฑฐ๋‚˜ ๋ฒฝ(#)์„ ๋งŒ๋‚ฌ์„ ๋•Œ๋Š” continue๊ฐ€ ์•„๋‹ˆ๋ผ break๋ฅผ ์จ์•ผ ํ•œ๋‹ค.

: ๊ฐ™์€ ๋ฐฉํ–ฅ์œผ๋กœ ์นธ์„ ๋Š˜๋ ค๊ฐ€๋Š” ๊ณผ์ •์—์„œ ์•ž์ด ๋ง‰ํžˆ๋ฉด ๊ทธ ๋’ค ์นธ๋“ค๋„ ์ „๋ถ€ ๊ฐˆ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ.
→ ์ด ๋ฐฉํ–ฅ ํƒ์ƒ‰ ์ž์ฒด๋ฅผ ์ค‘๋‹จํ•ด์•ผ ํ•œ๋‹ค.

 

์ฝ”๋“œ

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

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

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

	static int n, m, k, sr, sc, er, ec;
	static int[][] map;
	static int[] dr = { -1, 1, 0, 0 };
	static int[] dc = { 0, 0, -1, 1 };

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

		n = Integer.parseInt(st.nextToken());
		m = Integer.parseInt(st.nextToken());
		k = Integer.parseInt(st.nextToken());
		map = new int[n][m];

		for (int i = 0; i < n; i++) {
			String s = br.readLine();
			for (int j = 0; j < m; j++) {
				if (s.charAt(j) == '.') {
					map[i][j] = -1; // ๋ฏธ๋ฐฉ๋ฌธ
				} else {
					map[i][j] = -2; // ๋ฒฝ
				}
			}
		}

		st = new StringTokenizer(br.readLine());
		sr = Integer.parseInt(st.nextToken()) - 1;
		sc = Integer.parseInt(st.nextToken()) - 1;
		er = Integer.parseInt(st.nextToken()) - 1;
		ec = Integer.parseInt(st.nextToken()) - 1;

		System.out.println(bfs());
	}

	static int bfs() {
		Queue<Point> q = new LinkedList<>();

		map[sr][sc] = 0;
		q.offer(new Point(sr, sc));

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

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

					if (nr < 0 || nc < 0 || nr >= n || nc >= m || map[nr][nc] == -2)
						break;

					if (nr == er && nc == ec)
						return map[cur.r][cur.c] + 1;

					if (map[nr][nc] == -1) { // ๋ฏธ๋ฐฉ๋ฌธ
						q.offer(new Point(nr, nc));
						map[nr][nc] = map[cur.r][cur.c] + 1;
					} else if (map[nr][nc] < map[cur.r][cur.c] + 1) { // ์ด๋ฏธ ํ˜„์žฌ ์‹œ๊ฐ„ ์ดํ•˜๋กœ ๋„์ฐฉํ–ˆ์Œ.
						break;
					}
				}
			}
		}
		return map[er][ec];
	}
}

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

[BOJ][Java] 2533. ์‚ฌํšŒ๋ง ์„œ๋น„์Šค(SNS)  (0) 2025.09.24
[BOJ][Java] 15486. ํ‡ด์‚ฌ 2  (0) 2025.09.15
[BOJ][Java] 14503. ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ  (0) 2025.09.03
[SWEA][Java] 3421. ์ˆ˜์ œ ๋ฒ„๊ฑฐ ์žฅ์ธ  (4) 2025.08.29
[BOJ][Java] 1946. ์‹ ์ž… ์‚ฌ์›  (1) 2025.08.26
'๐Ÿ’ญ Problem Solving/Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [BOJ][Java] 2533. ์‚ฌํšŒ๋ง ์„œ๋น„์Šค(SNS)
  • [BOJ][Java] 15486. ํ‡ด์‚ฌ 2
  • [BOJ][Java] 14503. ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ
  • [SWEA][Java] 3421. ์ˆ˜์ œ ๋ฒ„๊ฑฐ ์žฅ์ธ
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)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

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

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

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

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

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