๊ธฐ๋ก๋ฐฉ

BOJ_2589 : ๋ณด๋ฌผ์„ฌ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_2589 : ๋ณด๋ฌผ์„ฌ

Soom_1n 2023. 4. 18. 23:22

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

2589๋ฒˆ: ๋ณด๋ฌผ์„ฌ

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

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • ์œก์ง€๋Š” ์ƒํ•˜์ขŒ์šฐ๋กœ ๊ฑด๋„ ์ˆ˜ ์žˆ๋Š” ๋•…์ด๋‹ค.
  • ๋‘ ๋ณด๋ฌผ์€ ํ•œ ์œก์ง€์— ์žˆ์œผ๋ฉฐ, ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ๊ธด ๋‘ ์œ„์น˜์— ์žˆ๋‹ค.
  • bfs๋กœ ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ํผ์ง„๊ณณ์„ ์ฐพ์œผ๋ฉด, ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ์ค‘ ๊ฐ€์žฅ ๊ธด ๊ฑฐ๋ฆฌ์ด๋‹ค.
  • ๋‘ ๋ณด๋ฌผ ์‚ฌ์ด๋ฅผ ์ด๋™ํ•˜๋Š” ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {
	static int max = 0;
	static int[] di = { -1, 0, 1, 0 };
	static int[] dj = { 0, 1, 0, -1 };
	static int r, c;
	static char[][] map;

	public static class Index {
		int i, j;

		public Index(int i, int j) {
			this.i = i;
			this.j = j;
		}

	}

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		r = Integer.parseInt(st.nextToken());
		c = Integer.parseInt(st.nextToken());
		map = new char[r][c];

		for (int i = 0; i < r; i++) {
			map[i] = br.readLine().toCharArray();
		}

		for (int i = 0; i < r; i++) {
			for (int j = 0; j < c; j++) {
				if (map[i][j] == 'L') {
					max = Math.max(max, bfs(i, j));
				}

			}
		}
		System.out.println(max);

	}

	private static int bfs(int i, int j) {
        boolean[][] visited = new boolean[r][c];
		Queue<Index> queue = new LinkedList<>();
		queue.add(new Index(i, j));
		visited[i][j] = true;
		int cnt = -1;

		while (!queue.isEmpty()) {
			int num = queue.size();
			cnt++;
			for (int t = 0; t < num; t++) {
				Index now = queue.poll();

				for (int d = 0; d < 4; d++) {
					int nexti = now.i + di[d];
					int nextj = now.j + dj[d];
					if (nexti >= 0 && nexti < r && nextj >= 0 && nextj < c && map[nexti][nextj] == 'L'
							&& !visited[nexti][nextj]) {
						queue.add(new Index(nexti, nextj));
						visited[nexti][nextj] = true;
				}}
			}
		}
		return cnt;

	}

}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ๊ฐ ์œก์ง€๋ณ„๋กœ BFS๋กœ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ์˜ ์ตœ๋Œ€๊ฐ’์„ ๊ตฌํ•œ๋‹ค.
  • ๊ทธ ์ค‘ ์ตœ๋Œ€๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ผ๋Š” ์ ์—์„œ bfs๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ๋– ์˜ฌ๋ž๊ณ , ๊ทธ ์ค‘ ์ตœ๋Œ€๊ฐ’์ด๋ผํ•ด์„œ ์—…๋ฐ์ดํŠธ๋งŒ ํ•˜๋ฉด ๋  ๊ฒƒ๊ฐ™์•˜๋‹ค.
  • ๊ฐ€๋กœ ์„ธ๋กœ๊ฐ€ 50 ์ดํ•˜์ด๋ฏ€๋กœ bfs, dfs ๋ชจ๋‘ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

728x90