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

๋ฐฑ์ค€ 7576๋ฒˆ : ํ† ๋งˆํ†  (JAVA) ๋ฌธ์ œ ํ’€์ด

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

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

 

7576๋ฒˆ: ํ† ๋งˆํ† 

์ฒซ ์ค„์—๋Š” ์ƒ์ž์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ์ •์ˆ˜ M,N์ด ์ฃผ์–ด์ง„๋‹ค. M์€ ์ƒ์ž์˜ ๊ฐ€๋กœ ์นธ์˜ ์ˆ˜, N์€ ์ƒ์ž์˜ ์„ธ๋กœ ์นธ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋‹จ, 2 โ‰ค M,N โ‰ค 1,000 ์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ๋Š” ํ•˜๋‚˜์˜ ์ƒ์ž์— ์ €์žฅ๋œ ํ† ๋งˆํ† 

www.acmicpc.net


 

โœ๏ธ ๋ฌธ์ œ

 

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

์ด ๋ฌธ์ œ๋Š” ๋ฏธ๋กœ ํƒ์ƒ‰ ๋ฌธ์ œ์ฒ˜๋Ÿผ ํ’€๋ฉด ๋œ๋‹ค. 

๋Œ€์‹  ์ด ๋ฌธ์ œ์—์„œ ์ฃผ์˜ํ•ด์•ผํ•  ์ ์€ ๋ฏธ๋กœ ํƒ์ƒ‰ ๋ฌธ์ œ์ฒ˜๋Ÿผ ํ•œ๊ณณ์—์„œ ์ถœ๋ฐœํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, ์‹œ์ž‘์ ์ด ์—ฌ๋Ÿฌ์ง€์ ์ด๋ผ๋Š” ์ ์ด๋‹ค.

์ด๊ฒƒ ๋•Œ๋ฌธ์— ๋จธ๋ฆฌ ์•„ํŒ ๋Š”๋ฐ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๊ทธ๋ฆฌ ์–ด๋ ต์ง€ ์•Š๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ ์‚ดํŽด๋ณด์ž.

int[][] days = new int[N][M];
int[][] tomatos = new int[N][M];

// N, M ์ฃผ์˜! ์šฐ๋ฆฌ๋Š” M์„ ํ–‰, N์„ ์—ด๋กœ ์‚ฌ์šฉ!
for(int i=0; i<M; i++){
	st = new StringTokenizer(bf.readLine();
	for(int j=0; j<N; j++){
	    int num = Integer.parseInt(st.nextToken());
          tomatos[i][j] = num;
          // 1(์ต์€ ํ† ๋งˆํ† )์ด๋ฉด ํ์— ๋„ฃ์–ด์ค€๋‹ค!
          if( num == 1 ){
              qu.offer(new Pair(i, j));
              days[i][j] = 0;
          }else{
              days[i][j] = -1;
          }
    }
}

 

๋จผ์ € ์ต์€ ํ† ๋งˆํ† (1)์ผ๋•Œ๋Š” ํ์— ๋„ฃ์–ด์ค€๋‹ค! (์‹œ์ž‘์  ์„ธํŒ…).

๊ทธ๋ฆฌ๊ณ , ์ต์ง€ ์•Š์•˜์œผ๋ฉด days[i][j]์— -1๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค. -> ๋‚˜์ค‘์— ๋ฐฉ๋ฌธ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ

 

๊ฐ€์žฅ ํ•ต์‹ฌ์ด ๋˜๋Š” ์ฝ”๋“œ์ด๋‹ค! 

์ต์€ ํ† ๋งˆํ†  ์ƒ,ํ•˜,์ขŒ,์šฐ์— ์ต์ง€ ์•Š์€ ํ† ๋งˆํ† ๊ฐ€ ์žˆ๋‹ค๋ฉด ํ† ๋งˆํ† ๋ฅผ ์ต์€ ์ƒํƒœ๋กœ ๋ฐ”๊พธ๊ณ , ํ•ด๋‹น days์˜ ๊ฐ’์„ +1ํ•ด์„œ ๋„ฃ์–ด์ค€๋‹ค!!

์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž.

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];
        
        if(nX <0 || nX >= N || nY < 0 || nY >= M){
            continue;
        }
        // ํ† ๋งˆํ† ๊ฐ€ ์—†๊ฑฐ๋‚˜, ์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ์œผ๋ฉด PASS!
        if(tomatos[nX][nY] == -1 || days[nX][nY] != -1){
            continue;
        }
        // ์ต์€ ํ† ๋งˆํ† ๋ฅผ ํ์— ๋„ฃ์–ด์ฃผ๊ณ , ์•ˆ์ต์€ ํ† ๋งˆํ† ์˜ ๊ฐœ์ˆ˜ -1
        qu.offer(new Pair(nX, nY)); notYet--;
        // ๋‚ ์งœ๋ฅผ +1 ํ•˜์—ฌ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.
        days[nX][nY] = days[p.x][p.y] + 1;
        // ํ•ด๋‹น ๋‚ ์งœ๊ฐ€ ์ตœ์ข… ๋‚ ์งœ์ธ์ง€ ๊ตฌ๋ถ„
        if(result < days[nX][nY]){
            result = days[nX][nY];
        }
    }
}

๋ฏธ๋ฆฌ ๋„ฃ์–ด์คฌ๋˜ ์ต์€ ํ† ๋งˆํ† ๋ฅผ ํ์—์„œ ์ฐจ๋ก€๋Œ€๋กœ ๊บผ๋‚ด๋ฉด์„œ, ํ•ด๋‹น ํ† ๋งˆํ† ์˜ ์ƒ,ํ•˜,์ขŒ,์šฐ๋ฅผ ํƒ์ƒ‰ํ•ด์„œ ์•ˆ์ต์€ ํ† ๋งˆํ† ๊ฐ€ ์žˆ๋‹ค๋ฉด ํ์— ๋„ฃ์–ด์ฃผ๊ณ , ํ•ด๋‹น ํ† ๋งˆํ† ์˜ ๋‚ ์งœ๋ฅผ ์ž์‹ ์„ ์ตํžˆ๊ฒŒ ํ–ˆ๋˜ ํ† ๋งˆํ† (?)์˜ ๋‚ ์งœ + 1 ํ•œ ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค! (๋ง์ด ์ด์ƒํ•œ๋ฐ ์ž˜ ์ดํ•ดํ•ด๋ณด์ž..)

 

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

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 result = 0;      // ์ตœ์ข… ๋‚ ์งœ
      int notYet = 0;      // ์•ˆ์ต์€ ํ† ๋งˆํ† 
      int M = Integer.parseInt(st.nextToken());
      int N = Integer.parseInt(st.nextToken());
      int[][] days = new int[N][M];     // ๋‚ ์งœ๋ฅผ ์ €์žฅํ•  2์ฐจ์›๋ฐฐ์—ด
      int[][] tomatos = new int[N][M];  // ํ† ๋งˆํ† ์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•  2์ฐจ์›๋ฐฐ์—ด
      
      Queue<Pair> qu = new LinkedList<>();
      int[] dx = {1, 0 , -1, 0};    // ์ƒํ•˜์ขŒ์šฐ ์ขŒํ‘œ ๊ณ„์‚ฐ์„ ์œ„ํ•œ ๋ฐฐ์—ด
      int[] dy = {0, 1, 0, -1};
      
      
      // ํ† ๋งˆํ†  ์ƒํƒœ ์ž…๋ ฅ
      for(int i=0; i<N; i++){
          st = new StringTokenizer(bf.readLine());
          for(int j=0; j<M; j++){
              days[i][j] = -1;  // ๋ฐฉ๋ฌธ์—ฌ๋ถ€๋ฅผ ์œ„ํ•ด -1๋กœ ์ดˆ๊ธฐํ™”
              int num = Integer.parseInt(st.nextToken());
              tomatos[i][j] = num;
              if(num == 1){
                  qu.offer(new Pair(i, j)); // ์ต์€ ํ† ๋งˆํ† ๋งŒ ํ์— ๋„ฃ์–ด์ค€๋‹ค.
                  days[i][j] = 0;           // ํ•ด๋‹น ๋‚ ์งœ 0์ผ์œผ๋กœ ์„ธํŒ…
              }else if(num == 0){
                  notYet++;     // ์ต์ง€ ์•Š์€ ํ† ๋งˆํ†  +1
              }
          }
      }
      
      // ์•ˆ์ต์€ ํ† ๋งˆํ† ๊ฐ€ ์—†๋‹ค๋ฉด ์ข…๋ฃŒ.
      if(notYet == 0){
          System.out.print(0);
          System.exit(0);
      }
      
      // ์ต์€ ํ† ๋งˆํ† ๊ฐ€ ๋งŒ์•ฝ n๊ฐœ ์ผ๋•Œ, ๊ฑธ๋ฆฐ ๋‚ ์งœ / n ์ธ๊ฐ€?
      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];
              
              if(nX <0 || nX >= N || nY < 0 || nY >= M){
                  continue;
              }
              // ํ† ๋งˆํ† ๊ฐ€ ์—†๊ฑฐ๋‚˜, ์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ์œผ๋ฉด PASS!
              if(tomatos[nX][nY] == -1 || days[nX][nY] != -1){
                  continue;
              }
              // ์ต์€ ํ† ๋งˆํ† ๋ฅผ ํ์— ๋„ฃ์–ด์ฃผ๊ณ , ์•ˆ์ต์€ ํ† ๋งˆํ† ์˜ ๊ฐœ์ˆ˜ -1
              qu.offer(new Pair(nX, nY)); notYet--;
              // ๋‚ ์งœ๋ฅผ +1 ํ•˜์—ฌ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.
              days[nX][nY] = days[p.x][p.y] + 1;
              // ํ•ด๋‹น ๋‚ ์งœ๊ฐ€ ์ตœ์ข… ๋‚ ์งœ์ธ์ง€ ๊ตฌ๋ถ„
              if(result < days[nX][nY]){
                  result = days[nX][nY];
              }
          }
      }
      
      // ๋งŒ์•ฝ ์•„์ง๋„ ์ต์ง€ ์•Š์€ ํ† ๋งˆํ† ๊ฐ€ ์žˆ๋‹ค๋ฉด -1 ์ถœ๋ ฅ!
      if(notYet > 0){
          System.out.print(-1);
      }else{
          System.out.print(result);
      }
    }
    
    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. ๐Ÿ–ฅ ์ „์ฒด ์ฝ”๋“œ
'๐Ÿ“œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ/BAEKJOON\BFS, DFS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ๋ฐฑ์ค€ 2206๋ฒˆ : ๋ฒฝ ๋ถ€์ˆ˜๊ณ  ์ด๋™ํ•˜๊ธฐ (JAVA) ๋ฌธ์ œ ํ’€์ด
  • ๋ฐฑ์ค€ 7569๋ฒˆ : ํ† ๋งˆํ†  (JAVA) ๋ฌธ์ œ ํ’€์ด
  • ๋ฐฑ์ค€ 2178๋ฒˆ : ๋ฏธ๋กœ ํƒ์ƒ‰ (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
๋ฐฑ์ค€ 7576๋ฒˆ : ํ† ๋งˆํ†  (JAVA) ๋ฌธ์ œ ํ’€์ด
์ƒ๋‹จ์œผ๋กœ

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

๊ฐœ์ธ์ •๋ณด

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

๋‹จ์ถ•ํ‚ค

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

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

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

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

๋ชจ๋“  ์˜์—ญ

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

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