๐Ÿ“œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ/BAEKJOON\BFS, DFS

๋ฐฑ์ค€ 2178๋ฒˆ : ๋ฏธ๋กœ ํƒ์ƒ‰ (JAVA) ๋ฌธ์ œ ํ’€์ด

2021. 6. 24. 12:43
๋ชฉ์ฐจ
  1. โœ๏ธ ๋ฌธ์ œ
  2.  
  3. ๐Ÿ” ๋ฌธ์ œ ํ•ด๊ฒฐ
  4. ๐Ÿ–ฅ ์ „์ฒด ์ฝ”๋“œ
๋ฐ˜์‘ํ˜•

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

 

2178๋ฒˆ: ๋ฏธ๋กœ ํƒ์ƒ‰

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

www.acmicpc.net


 

โœ๏ธ ๋ฌธ์ œ

 

 

๐Ÿ” ๋ฌธ์ œ ํ•ด๊ฒฐ

์ด ๋ฌธ์ œ๋Š” ์ด์ „์˜ ํ’€์—ˆ๋˜, ๊ทธ๋ฆผ ๋ฌธ์ œ์ฒ˜๋Ÿผ ํ’€๋ฉด ์•ˆ๋œ๋‹ค. ์ด์ „ ๋ฌธ์ œ์ฒ˜๋Ÿผ ํ’€๊ฒŒ ๋˜๋ฉด ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜์ง€ ๋ชปํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ์ด ๋ฌธ์ œ๋Š” ์‹œ์ž‘์ง€์ (0,0)์œผ๋กœ ๋ถ€ํ„ฐ์˜ ๋ชจ๋“  ์นธ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ๋˜ ๋‹ค๋ฅธ ๋ฐฐ์—ด์— ์ €์žฅ์„ ํ•  ๊ฒƒ์ด๋‹ค.

์ด๊ฒŒ ๋ฌด์Šจ ๋ง์ด๋ƒ๋ฉด, ์•„๋ž˜ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด

์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ๋กœ๋Š” ๋นจ๊ฐ„์ƒ‰ ๊ฒฝ๋กœ์ธ๋ฐ, ์–ด๋–ป๊ฒŒ ๊ตฌํ•˜๋ƒ๋ฉด ์œ„์—์„œ ๋งํ–ˆ๋“ฏ์ด ์‹œ์ž‘์ ์œผ๋กœ๋ถ€ํ„ฐ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•œ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•ด์ค„๊ฒƒ์ด๋‹ค.

int[][] dist = new int[N][M];	// ์‹œ์ž‘์ ๊ณผ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ €์žฅํ•˜๋Š” 2์ฐจ์› ๋ฐฐ์—ด

 

์ด์ œ ์‹œ์ž‘์ ์—์„œ ๋ถ€ํ„ฐ ์ถœ๋ฐœํ•˜์—ฌ 1์ธ ๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉด์„œ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ dist๋ฐฐ์—ด์— ๋„ฃ์–ด์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค!

์‹œ์ž‘์ ์„ (0,0) ์œผ๋กœ ๋ฏธ๋ฆฌ ํ์— ๋„ฃ์–ด์ค€ ์ƒํƒœ์—์„œ ์ƒํ•˜์ขŒ์šฐ์˜ ๊ฐ’์ด 1์ธ์ง€ ์•„๋‹Œ์ง€ ์ฒดํฌํ•˜๋ฉด ๋œ๋‹ค.

๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ์„ ํ•  ๋•Œ์—๋Š”, ์ด์ „ ์‹œ์ž‘์ ์˜ + 1 ๋งŒ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž.

qu.offer(new Pair(0,0));  // ์‹œ์ž‘์ 
dist[0][0] = 0;   // ์ฒซ ์‹œ์ž‘์ด๋‹ˆ๊นŒ ๊ฑฐ๋ฆฌ๊ฐ€ 0์ด๋‹ค.
   
while(!qu.isEmpty()){
    Pair p = qu.poll();
    
    // ์ƒ, ํ•˜, ์ขŒ, ์šฐ๋ฅผ ๊ณ„์‚ฐํ•ด์ค€๋‹ค.
    for(int i=0; i<4; i++){
      int nX = p.x + dx[i];
      int nY = p.y + dy[i];
      
      // ๋ฒฝ์— ๋ถ€๋”ชํžˆ๊ฑฐ๋‚˜, ๋ฒ”์œ„๋ฅผ ๋„˜์–ด๊ฐ€๋ฉด PASS
      if(nX < 0 || nX >= N || nY < 0 || nY >= M){
          continue;
      }
      // ๊ธธ์ด ์•„๋‹ˆ๊ฑฐ๋‚˜, ๋ฐฉ๋ฌธ์„ ํ–ˆ๋‹ค๋ฉด PASS
      if(miro[nX][nY] == '0' || dist[nX][nY] != -1){
          continue;
      }
      
      // ํ์— ์ด๋™ํ•œ ์ขŒํ‘œ๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.
      qu.offer(new Pair(nX, nY));
      // ํ•œ์นธ ์ด๋™ํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์—, ์ด์ „ ์ถœ๋ฐœ์ง€์ ์˜ ๊ฑฐ๋ฆฌ +1์„ ํ•ด์ค€๋‹ค.
      dist[nX][nY] = dist[p.x][p.y] + 1;
    }
}

์ € ๊ฒฝ๋กœ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ๊ณ„์‚ฐํ•ด์ฃผ๋ฉด ์•„๋ž˜์˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.

์—ฌ๊ธฐ์„œ ์˜๋ฌธ์ ์ด ๋“œ๋Š” ์ ์€ ์ตœ์žฅ๊ฒฝ๋กœ์ผ ๋•Œ์˜ 15๊ฐ€ ์ €์žฅ์ด ๋  ์ˆ˜๋„ ์žˆ๋Š”๊ฑฐ ์•„๋‹Œ๊ฐ€? ๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ํ์—์„œ ์„œ๋กœ์˜ ๊ฒฝ๋กœ๋ฅผ ํ•˜๋‚˜์”ฉ ๋„ฃ๊ณ  ๋นผ๊ณ  ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ตญ์—” ๊ฐ€์žฅ ๋น ๋ฅธ ๊ฒฝ๋กœ๊ฐ€ ๋จผ์ € ๋„๋‹ฌํ•˜์—ฌ ๋ฐฐ์—ด์— ๊ฐ’์„ ๋„ฃ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ž˜ ๊ฑธ๋ฆฐ ๊ฒฝ๋กœ๋Š” ๋ฐฐ์—ด์— ๊ฐ’์„ ๋„ฃ์œผ๋ ค๊ณ  ํ•ด๋„ ์ด๋ฏธ ๊ฐ’์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ’์„ ๋„ฃ์ง€ ๋ชปํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค! ์•„๋ž˜ ์กฐ๊ฑด์ฒ˜๋Ÿผ ๋ง์ด๋‹ค.

// ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฐ์—ด(dist)์„ -1๋กœ ๊ฐ’์„ ์„ธํŒ… ํ•ด๋‘˜ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฏธ ๊ฐ’์ด ์žˆ๋‹ค๋ฉด PASS!
if( miro[i][j] == 0 || dist[i][j] != -1 ){
	continue;
}

 

๐Ÿ–ฅ ์ „์ฒด ์ฝ”๋“œ

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

public class Main {
    public static void main(String args[]) throws IOException {
      BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
      StringTokenizer st = new StringTokenizer(bf.readLine());
      
      int N = Integer.parseInt(st.nextToken());
      int M = Integer.parseInt(st.nextToken());
      char[][] miro = new char[N][M];  // ๋ฏธ๋กœ๋ฅผ ์ €์žฅํ•  ๋ฐฐ์—ด
      int[][] dist = new int[N][M];    // ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•  dist ๋ฐฐ์—ด
      int[] dx = {1, 0 , -1, 0};       // ์ƒํ•˜์ขŒ์šฐ ๊ณ„์‚ฐํ•  x์ขŒํ‘œ
      int[] dy = {0, 1, 0, -1};        // ์ƒํ•˜์ขŒ์šฐ ๊ณ„์‚ฐํ•  y์ขŒํ‘œ
      Queue<Pair> qu = new LinkedList<>();
      
      for(int i=0; i<N; i++){
          String line = bf.readLine();
          for(int j=0; j<M; j++){
              miro[i][j] = line.charAt(j);
              dist[i][j] = -1;    // ๊ฑฐ๋ฆฌ๋ฅผ -1๋กœ ์„ธํŒ…ํ•˜๋ฉด, ๋ฐฉ๋ฌธ์—ฌ๋ถ€๋ฅผ ํ™•์ธ๊ฐ€๋Šฅ.
          }
      }
      
      qu.offer(new Pair(0,0));  // ์‹œ์ž‘์ 
      dist[0][0] = 0;   // ์ฒซ ์‹œ์ž‘์ด๋‹ˆ๊นŒ ๊ฑฐ๋ฆฌ๊ฐ€ 0์ด๋‹ค.
      
      while(!qu.isEmpty()){
          Pair p = qu.poll();
          
          // ์ƒ, ํ•˜, ์ขŒ, ์šฐ๋ฅผ ๊ณ„์‚ฐํ•ด์ค€๋‹ค.
          for(int i=0; i<4; i++){
            int nX = p.x + dx[i];
            int nY = p.y + dy[i];
            
            // ๋ฒฝ์— ๋ถ€๋”ชํžˆ๊ฑฐ๋‚˜, ๋ฒ”์œ„๋ฅผ ๋„˜์–ด๊ฐ€๋ฉด PASS
            if(nX < 0 || nX >= N || nY < 0 || nY >= M){
                continue;
            }
            // ๊ธธ์ด ์•„๋‹ˆ๊ฑฐ๋‚˜, ๋ฐฉ๋ฌธ์„ ํ–ˆ๋‹ค๋ฉด PASS
            if(miro[nX][nY] == '0' || dist[nX][nY] != -1){
                continue;
            }
            
            // ํ์— ์ด๋™ํ•œ ์ขŒํ‘œ๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.
            qu.offer(new Pair(nX, nY));
            // ํ•œ์นธ ์ด๋™ํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์—, ์ด์ „ ์ถœ๋ฐœ์ง€์ ์˜ ๊ฑฐ๋ฆฌ +1์„ ํ•ด์ค€๋‹ค.
            dist[nX][nY] = dist[p.x][p.y] + 1;
          }
      }
      
      // ๋งˆ์ง€๋ง‰ ์ง€์ ์˜ (๊ฑฐ๋ฆฌ + 1)๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
      System.out.print(dist[N-1][M-1] + 1);
    }
    
    // ํ์— ์ขŒํ‘œ๋ฅผ ๋„ฃ์–ด์ฃผ๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค
    public static class Pair{
        int x, y;
        
        public Pair(int x, int y){
            this.x = x;
            this.y = y;
        }
        
        public int getX(){
            return x;
        }
        public int getY(){
            return y;
        }
        public void setX(int x){
            this.x = x;
        }
        public void setY(int y){
            this.y = y;
        }
    }
}

 

๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
  1. โœ๏ธ ๋ฌธ์ œ
  2.  
  3. ๐Ÿ” ๋ฌธ์ œ ํ•ด๊ฒฐ
  4. ๐Ÿ–ฅ ์ „์ฒด ์ฝ”๋“œ
'๐Ÿ“œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ/BAEKJOON\BFS, DFS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ๋ฐฑ์ค€ 2206๋ฒˆ : ๋ฒฝ ๋ถ€์ˆ˜๊ณ  ์ด๋™ํ•˜๊ธฐ (JAVA) ๋ฌธ์ œ ํ’€์ด
  • ๋ฐฑ์ค€ 7569๋ฒˆ : ํ† ๋งˆํ†  (JAVA) ๋ฌธ์ œ ํ’€์ด
  • ๋ฐฑ์ค€ 7576๋ฒˆ : ํ† ๋งˆํ†  (JAVA) ๋ฌธ์ œ ํ’€์ด
  • ๋ฐฑ์ค€ 1926๋ฒˆ : ๊ทธ๋ฆผ (JAVA) ๋ฌธ์ œ ํ’€์ด
iseunghan
iseunghan
๊พธ์ค€ํ•˜๊ฒŒ ์—ด์‹ฌํžˆ..
iseunghan
iseunghan

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

  • ์–ด์ œ๋ณด๋‹ค ๋‚˜์€ ์˜ค๋Š˜์ด ๋˜๊ธฐ ์œ„ํ•ด ๐Ÿ”ฅ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (261)
    • ๐Ÿ’ Spring (14)
      • ๊ฐœ๋… ๋ฐ ์ดํ•ด (2)
      • Spring ํ•ต์‹ฌ ๊ธฐ์ˆ  (24)
      • Spring REST API (8)
      • Spring MVC, DB ์ ‘๊ทผ ๊ธฐ์ˆ  (7)
      • Spring Security (23)
      • Spring in Action (1)
    • ๐ŸŒป JAVA (84)
      • ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ (20)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ๊ตฌ์กฐ (13)
      • ๋””์ž์ธ ํŒจํ„ด (7)
      • ์ •๋ฆฌ์ •๋ฆฌ์ •๋ฆฌ (43)
      • JUnit (1)
    • ๐Ÿ”– Snippets (3)
      • Javascript (3)
    • โš™๏ธ Devops (22)
      • โ› Git (11)
      • ๐Ÿณ Docker (6)
      • ๐Ÿง Linux (3)
      • ๐ŸŒˆ Jenkins (1)
      • ๐Ÿ“ฌ Kafka (1)
    • ๐Ÿ’ฌ ETC.. (4)
      • ๐Ÿ’ป macOS (2)
    • ๐ŸŒง๏ธ ORM (2)
      • JPA (2)
    • ๐Ÿ Python (2)
    • ๐Ÿ“š Databases (15)
      • ์˜ค๋ผํด๋กœ ๋ฐฐ์šฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐœ๋ก ๊ณผ ์‹ค์Šต(2ํŒ) (3)
      • RealMySQL 8.0 (8)
    • ๐Ÿ”ฅ Computer Science (5)
      • ๐Ÿ“ก ๋„คํŠธ์›Œํฌ (5)
    • ๐Ÿท๏ธ ํ˜‘์—… (1)
    • ๐Ÿ“œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (38)
      • BAEKJOON\์ˆ˜ํ•™ 1, ์ˆ˜ํ•™ 2 (8)
      • BAEKJOON\์žฌ๊ท€ (5)
      • BAEKJOON\๋ธŒ๋ฃจํŠธ ํฌ์Šค (3)
      • BAEKJOON\์ •๋ ฌ (1)
      • BAEKJOON\๋ฐฑํŠธ๋ž˜ํ‚น (5)
      • BAEKJOON\BFS, DFS (6)
      • BAEKJOON\์ด๋ถ„ํƒ์ƒ‰ (1)
      • BAEKJOON\๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (9)
      • BAEKJOON\๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ (0)
    • โœจ ISEUNGHAN (1)

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
๋ฐ˜์‘ํ˜•
hELLO ยท Designed By ์ •์ƒ์šฐ.
iseunghan
๋ฐฑ์ค€ 2178๋ฒˆ : ๋ฏธ๋กœ ํƒ์ƒ‰ (JAVA) ๋ฌธ์ œ ํ’€์ด
์ƒ๋‹จ์œผ๋กœ

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

๊ฐœ์ธ์ •๋ณด

  • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ
  • ํฌ๋Ÿผ
  • ๋กœ๊ทธ์ธ

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.