[BOJ/๋ฐฑ์ค€] 2178 ๋ฏธ๋กœ ํƒ์ƒ‰(JAVA)

2025. 2. 11. 09:59ยท๐Ÿ’ช Algorithm
๋ฐ˜์‘ํ˜•

๋งํฌ

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

 

๋ฌธ์ œ ์š”์•ฝ

๋ฏธ๋กœ ๋ฐฐ์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, (1,1)์—์„œ ์ถœ๋ฐœํ•˜์—ฌ (N, M)์œผ๋กœ ์ด๋™ํ•  ๋•Œ ์ง€๋‚˜์•ผ ํ•˜๋Š” ์ตœ์†Œ์˜ ์นธ ์ˆ˜ ๊ตฌํ•˜๊ธฐ

1์€ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์นธ, 0์€ ์ด๋™ํ•  ์ˆ˜ ์—†๋Š” ์นธ์„ ์˜๋ฏธํ•œ๋‹ค.

 

์ œํ•œ

  • ์ฒซ์งธ ์ค„์— ๋‘ ์ •์ˆ˜ N, M(2 ≤ N, M ≤ 100)์ด ์ฃผ์–ด์ง„๋‹ค.
  • ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” M๊ฐœ์˜ ์ •์ˆ˜๋กœ ๋ฏธ๋กœ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
    • ๊ฐ๊ฐ์˜ ์ˆ˜๋“ค์€ ๋ถ™์–ด์„œ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

 

ํ’€์ด

๋ฌธ์ œ์—์„œ (1,1)์ด๋ผ๊ณ  ์ฃผ์–ด์กŒ๋Š”๋ฐ, ์ด๋Š” ๋ฐฐ์—ด์—์„œ (0,0) ๊ฐ’์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์™ผ์ชฝ ๋งจ ์œ„์—์„œ ์˜ค๋ฅธ์ชฝ ๋งจ ์•„๋ž˜๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค.

 

[์ž…๋ ฅ]

ํ‰์†Œ์™€ ๋‹ค๋ฅด๊ฒŒ ๊ฐ๊ฐ์˜ ์ˆ˜๋“ค์ด ๋ถ™์–ด์„œ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ StringTokenizer๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์‰ฝ๊ฒŒ ๋– ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋Š” ์ž…๋ ฅ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค.

  1. ํ•œ ์ค„์„ `String str` ์— ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
  2. `str`์„ ์ˆœํšŒํ•˜๋ฉฐ `str.charAt(i)-'0'` ๊ฐ’์„ `int` ๋ฐฐ์—ด์˜ `i`๋ฒˆ์งธ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
for(int i=0; i<N; i++){
	String str = br.readLine();
	for(int j=0; j<M; j++){
		board[i][j] = str.charAt(j)-'0';
	}
}

 

์ฝ”๋“œ์˜ ๊ธธ์ด๋Š” ๋ณต์žก๋„์™€ ์ƒ๊ด€์—†์ง€๋งŒ ๊ฐœ์ธ์ ์œผ๋กœ ์ € 5์ค„์„ ์กฐ๊ธˆ ์ค„์ด๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค..!

๊ทธ๋ž˜์„œ `String → int []` ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์ž๋ฐ” api ์—†๋‚˜~ ์ฐพ๋‹ค๊ฐ€ ์ด๋Ÿฐ ๊ฑธ ๋ฐœ๊ฒฌํ•ฉ๋‹ˆ๋‹ค.

 

๊ณต์‹๋ฌธ์„œ chars
์ถœ์ฒ˜: ์ž๋ฐ” 21 ๊ณต์‹ ๋ฌธ์„œ

https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/String.html#chars()

 

String (Java SE 21 & JDK 21)

All Implemented Interfaces: Serializable, CharSequence, Comparable , Constable, ConstantDesc The String class represents character strings. All string literals in Java programs, such as "abc", are implemented as instances of this class. Strings are constan

docs.oracle.com

 

`chars`๋ผ๋Š” ํ•จ์ˆ˜์ธ๋ฐ, String์„ IntStream์œผ๋กœ ๋ณ€ํ™˜ํ•ด ์ฃผ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

๊ทผ๋ฐ, `String` ์† ๊ฐ๊ฐ์˜ `char` ๊ฐ’์„ ์•„์Šคํ‚ค์ฝ”๋“œ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— `char ’ 0’`์˜ ์•„์Šคํ‚ค์ฝ”๋“œ ๊ฐ’์„ ๋นผ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฑด `map()` ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ `IntStream`์„ `array` ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด `toArray()` ํ•จ์ˆ˜๋ฅผ ์“ฐ๋ฉด ์ตœ์ข…์ ์œผ๋กœ ์ž…๋ ฅ๋ฐ›๋Š” ๋ถ€๋ถ„์ด ์™„์„ฑ๋ฉ๋‹ˆ๋‹ค.

for(int i=0; i<N; i++){
	board[i] = br.readLine().chars().map(val ->  val-'0').toArray();
}

 

[ํ๋ฆ„]

N๊ณผ M์˜ ์ตœ๋Œ“๊ฐ’์ด 10^2์ด๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” `O(N^3)`๊นŒ์ง€๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๋ฌธ์ œ๋กœ, BFS๋กœ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ์Šต๋‹ˆ๋‹ค.

  1. ๋ฐฐ์—ด์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
    1. ๋™์‹œ์— ๊ฐ’์ด 1์ธ ์นธ์˜ ์ •๋ณด(์ขŒํ‘œ, int์˜ ์ตœ๋Œ“๊ฐ’)๋ฅผ ํ์— ์‚ฝ์ž…ํ•œ๋‹ค.
  2. ๊ธฐ์ค€์  ์ •๋ณด๋ฅผ ํ์— ์‚ฝ์ž…ํ•œ๋‹ค. ์ •๋ณด๋Š” ์ขŒํ‘œ ๊ฐ’๊ณผ ์ด๋™ ๊ฑฐ๋ฆฌ์ด๋‹ค.
    1. ์‹œ์ž‘์ ์ธ (1,1)์€ ์ด๋™ ๊ฑฐ๋ฆฌ๊ฐ€ 1์ด๋‹ค.
  3. ์‹œ์ž‘์ ์œผ๋กœ๋ถ€ํ„ฐ 4 ๋ฐฉํ–ฅ(์œ„, ์•„๋ž˜, ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ)์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” 1์นธ์„ ์ฐพ๋Š”๋‹ค.
  4. ๋งŒ์•ฝ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ 1์นธ์ด ์žˆ๋‹ค๋ฉด, ํ•ด๋‹น ์นธ์˜ ์ •๋ณด(์ขŒํ‘œ, ์ด๋™ ๊ฑฐ๋ฆฌ)๋ฅผ ํ์— ์‚ฝ์ž…ํ•œ๋‹ค.
    1. ์ด๋™ ๊ฑฐ๋ฆฌ๋Š” (๊ธฐ์กด ์ด๋™๊ฑฐ๋ฆฌ ๊ฐ’, ๊ธฐ์ค€์ +1) ์ค‘ ์ž‘์€ ๊ฐ’์ด๋‹ค.
  5. ํ์—์„œ ํ•˜๋‚˜์”ฉ ์ •๋ณด๋ฅผ ๋นผ๋‚ด์„œ ์ด๋ฅผ ๊ธฐ์ค€์ ์œผ๋กœ 2~4 ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
  6. ๋งŒ์•ฝ ์ƒˆ๋กœ ํƒ์ƒ‰ํ•  ์œ„์น˜๊ฐ€ ๋ชฉ์ ์ง€ ์œ„์น˜๋ผ๋ฉด, ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

์ฝ”๋“œ

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

public class Main {
    static int N, M;
    static int[][] board;
    static boolean[][] visited;
    static int[] dx = {0,-1,0,1};
    static int[] dy = {1,0,-1,0};

    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());
        board = new int[N][M];
        visited = new boolean[N][M];

        for(int i=0; i<N; i++){
            board[i] = br.readLine().chars().map(val ->  val-'0').toArray();
        }

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

    static int bfs(int startX, int startY){
        // ์‹œ์ž‘์  ์ดˆ๊ธฐํ™”
        Queue<int[]> queue = new LinkedList<>();
        queue.add(new int[]{startX, startY, 1});
        visited[startX][startY]=true;

        while(!queue.isEmpty()){
            int[] info = queue.poll();

            for(int i=0; i<4; i++){ // ์œ„, ์•„๋ž˜, ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ 4๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰
                int nx = info[0] + dx[i];
                int ny = info[1] + dy[i];

                if(nx<0 || ny<0 || nx>=N || ny>=M) continue; // ๊ฒฝ๊ณ„ ๋ฒ”์œ„ ์ฒดํฌ

                if(nx==N-1 && ny==M-1){ // ๋ชฉ์ ์ง€์— ๋„๋‹ฌํ•˜๋ฉด ๋‹ต ๋ฐ˜ํ™˜
                    return info[2]+1;
                }

                if(board[nx][ny]==1 && !visited[nx][ny]){ // ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ 1์นธ์€ ํ์— ์‚ฝ์ž…
                    visited[nx][ny]=true;
                    queue.add(new int[]{nx,ny,info[2]+1}); // ์ƒˆ๋กœ์šด ์นธ ์ตœ์†Œ ๊ฑฐ๋ฆฌ = ์ด์ „ ์นธ ์ตœ์†Œ ๊ฑฐ๋ฆฌ + 1
                }
            }
        }
        return -1;
    }
}

๐Ÿท ์‹œ๊ฐ„ ๋ณต์žก๋„

  • board: `N` * `M` ๋ฐฐ์—ด
  • `bfs()` ํ•จ์ˆ˜๋Š” ๋ชจ๋“  ์ขŒํ‘œ๋ฅผ ์ˆœํšŒํ•˜๋ฏ€๋กœ, `O(N*M)`
  • ์ตœ์ข… ์‹œ๊ฐ„ ๋ณต์žก๋„: `O(N*M)`

๐Ÿท ์‹คํ–‰ ์†๋„

Time: 124 ms, Memory: 14956 KB

๋ฐ˜์‘ํ˜•

'๐Ÿ’ช Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ/๋ฐฑ์ค€] 1010 ๋‹ค๋ฆฌ ๋†“๊ธฐ (JAVA)  (1) 2025.02.13
[BOJ/๋ฐฑ์ค€] 13023 ABCDE(JAVA)  (1) 2025.02.12
[BOJ/๋ฐฑ์ค€] 1931 ํšŒ์˜์‹ค ๋ฐฐ์ •(JAVA)  (1) 2025.02.10
[BOJ/๋ฐฑ์ค€] 2573 ๋น™์‚ฐ (JAVA)  (1) 2025.02.09
'๐Ÿ’ช Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [BOJ/๋ฐฑ์ค€] 1010 ๋‹ค๋ฆฌ ๋†“๊ธฐ (JAVA)
  • [BOJ/๋ฐฑ์ค€] 13023 ABCDE(JAVA)
  • [BOJ/๋ฐฑ์ค€] 1931 ํšŒ์˜์‹ค ๋ฐฐ์ •(JAVA)
  • [BOJ/๋ฐฑ์ค€] 2573 ๋น™์‚ฐ (JAVA)
dev-heyjin
dev-heyjin
  • dev-heyjin
    ๊ฐœ๋ฐœ ๊ธฐ๋ก
    dev-heyjin
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (56)
      • ๐ŸŽฏ Programming (8)
      • ๐Ÿ’ช Algorithm (16)
      • โš™๏ธ CS (31)
        • ๋„คํŠธ์›Œํฌ (15)
        • ์šด์˜์ฒด์ œ (15)
        • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (0)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

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

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

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    RDS
    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
    ํ•ดํ‚น
    DB
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
dev-heyjin
[BOJ/๋ฐฑ์ค€] 2178 ๋ฏธ๋กœ ํƒ์ƒ‰(JAVA)
์ƒ๋‹จ์œผ๋กœ

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