05-16 05:32
Recent Posts
Recent Comments
๊ด€๋ฆฌ ๋ฉ”๋‰ด

miinsun

[BAEKJOON] ๋ฐฑ์ค€ BFS 2589 :: ๋ณด๋ฌผ์„ฌ ๋ณธ๋ฌธ

Algorithm/Baekjoon

[BAEKJOON] ๋ฐฑ์ค€ BFS 2589 :: ๋ณด๋ฌผ์„ฌ

miinsun 2022. 6. 15. 19:58

๐Ÿ’ฌ  ๋ฌธ์ œ ์„ค๋ช…

๋ณด๋ฌผ์„ฌ ์ง€๋„๋ฅผ ๋ฐœ๊ฒฌํ•œ ํ›„ํฌ ์„ ์žฅ์€ ๋ณด๋ฌผ์„ ์ฐพ์•„๋‚˜์„ฐ๋‹ค. ๋ณด๋ฌผ์„ฌ ์ง€๋„๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ง์‚ฌ๊ฐํ˜• ๋ชจ์–‘์ด๋ฉฐ ์—ฌ๋Ÿฌ ์นธ์œผ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ๋‹ค. ๊ฐ ์นธ์€ ์œก์ง€(L)๋‚˜ ๋ฐ”๋‹ค(W)๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ๋‹ค. ์ด ์ง€๋„์—์„œ ์ด๋™์€ ์ƒํ•˜์ขŒ์šฐ๋กœ ์ด์›ƒํ•œ ์œก์ง€๋กœ๋งŒ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ•œ ์นธ ์ด๋™ํ•˜๋Š”๋ฐ ํ•œ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค. ๋ณด๋ฌผ์€ ์„œ๋กœ ๊ฐ„์— ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋กœ ์ด๋™ํ•˜๋Š”๋ฐ ์žˆ์–ด ๊ฐ€์žฅ ๊ธด ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ์œก์ง€ ๋‘ ๊ณณ์— ๋‚˜๋‰˜์–ด ๋ฌปํ˜€์žˆ๋‹ค. ์œก์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ๊ณณ ์‚ฌ์ด๋ฅผ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋กœ ์ด๋™ํ•˜๋ ค๋ฉด ๊ฐ™์€ ๊ณณ์„ ๋‘ ๋ฒˆ ์ด์ƒ ์ง€๋‚˜๊ฐ€๊ฑฐ๋‚˜, ๋ฉ€๋ฆฌ ๋Œ์•„๊ฐ€์„œ๋Š” ์•ˆ ๋œ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ์œ„์™€ ๊ฐ™์ด ์ง€๋„๊ฐ€ ์ฃผ์–ด์กŒ๋‹ค๋ฉด ๋ณด๋ฌผ์€ ์•„๋ž˜ ํ‘œ์‹œ๋œ ๋‘ ๊ณณ์— ๋ฌปํ˜€ ์žˆ๊ฒŒ ๋˜๊ณ , ์ด ๋‘˜ ์‚ฌ์ด์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋กœ ์ด๋™ํ•˜๋Š” ์‹œ๊ฐ„์€ 8์‹œ๊ฐ„์ด ๋œ๋‹ค.
๋ณด๋ฌผ ์ง€๋„๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๋ณด๋ฌผ์ด ๋ฌปํ˜€ ์žˆ๋Š” ๋‘ ๊ณณ ๊ฐ„์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋กœ ์ด๋™ํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

๐Ÿ”จ  ์ž…์ถœ๋ ฅ ์˜ˆ

์ž…๋ ฅ 

  • ์ฒซ์งธ ์ค„์—๋Š” ๋ณด๋ฌผ ์ง€๋„์˜ ์„ธ๋กœ์˜ ํฌ๊ธฐ์™€ ๊ฐ€๋กœ์˜ ํฌ๊ธฐ๊ฐ€ ๋นˆ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค.
  • ์ด์–ด L๊ณผ W๋กœ ํ‘œ์‹œ๋œ ๋ณด๋ฌผ ์ง€๋„๊ฐ€ ์•„๋ž˜์˜ ์˜ˆ์™€ ๊ฐ™์ด ์ฃผ์–ด์ง€๋ฉฐ, ๊ฐ ๋ฌธ์ž ์‚ฌ์ด์—๋Š” ๋นˆ ์นธ์ด ์—†๋‹ค.
  • ๋ณด๋ฌผ ์ง€๋„์˜ ๊ฐ€๋กœ, ์„ธ๋กœ์˜ ํฌ๊ธฐ๋Š” ๊ฐ๊ฐ 50์ดํ•˜์ด๋‹ค.

 

์ถœ๋ ฅ

  • ์ฒซ์งธ ์ค„์— ๋ณด๋ฌผ์ด ๋ฌปํ˜€ ์žˆ๋Š” ๋‘ ๊ณณ ์‚ฌ์ด๋ฅผ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋กœ ์ด๋™ํ•˜๋Š” ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ 1)

5 7
WLLWWWL
LLLWLLL
LWLWLWW
LWLWLLL
WLLWLWW

 

์˜ˆ์ œ ์ถœ๋ ฅ 1)

8

โ€‹

๐Ÿ’ป  Main.java

/* ๋ฐฑ์ค€ BFS - 2589 :: ๋ณด๋ฌผ์„ฌ */
import java.util.*;
import java.io.*;

class Point {
	int x;
	int y;
	int cost;
	
	Point(int x, int y, int cost) {
		this.x = x;
		this.y = y;
		this.cost = cost;
	}
}

public class Main{
    static char[][] board;
    static final int dx[] = {0,0,1,-1};  //์ƒํ•˜์ขŒ์šฐ ๋ฐฉํ–ฅ ์„ค์ •
    static final int dy[] = {1,-1,0,0};  //์ƒํ™”์ขŒ์šฐ ๋ฐฉํ–ฅ ์„ค์ •
    static int n, m;
	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 char[n][m];
        for(int i = 0; i < n; i++) {
        	String s = br.readLine();
        	for(int j = 0; j < m; j++) {
        		board[i][j] = s.charAt(j);
        	}
        }

        int max = 0;
        for(int i = 0; i < n; i++) {
        	for(int j = 0; j < m; j++) {
        		if(board[i][j] == 'L')
        			max = Math.max(max, bfs(i, j));
        	}
        }
        
        System.out.println(max);
    }
	
	static int bfs(int x, int y) {
		Queue<Point> q = new LinkedList<>();
		boolean[][] visited = new boolean[n][m];

		q.add(new Point(x, y, 0));
		visited[x][y] = true;
		int cnt = 1;
		
		while(!q.isEmpty()) {
			Point tmp = q.poll();
			for(int i = 0; i < 4; i++) {
				int nx = tmp.x + dx[i];
				int ny = tmp.y + dy[i];
				
				if(nx >= 0 && ny >= 0 && nx < n && ny < m 
						&& board[nx][ny] == 'L' && !visited[nx][ny]) {
					q.add(new Point(nx, ny, tmp.cost + 1));
					visited[nx][ny] = true;
					cnt = Math.max(cnt, tmp.cost + 1);
				}
			}
		}
		
		return cnt;
	}
}
Comments