04-10 13:07
Recent Posts
Recent Comments
๊ด€๋ฆฌ ๋ฉ”๋‰ด

miinsun

[BAEKJOON] ๋ฐฑ์ค€ BFS 2468 :: ์•ˆ์ „ ์˜์—ญ ๋ณธ๋ฌธ

Algorithm/Baekjoon

[BAEKJOON] ๋ฐฑ์ค€ BFS 2468 :: ์•ˆ์ „ ์˜์—ญ

miinsun 2022. 6. 12. 00:19

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

์žฌ๋‚œ๋ฐฉ์žฌ์ฒญ์—์„œ๋Š” ๋งŽ์€ ๋น„๊ฐ€ ๋‚ด๋ฆฌ๋Š” ์žฅ๋งˆ์ฒ ์— ๋Œ€๋น„ํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ์„ ๊ณ„ํšํ•˜๊ณ  ์žˆ๋‹ค. ๋จผ์ € ์–ด๋–ค ์ง€์—ญ์˜ ๋†’์ด ์ •๋ณด๋ฅผ ํŒŒ์•…ํ•œ๋‹ค. ๊ทธ ๋‹ค์Œ์— ๊ทธ ์ง€์—ญ์— ๋งŽ์€ ๋น„๊ฐ€ ๋‚ด๋ ธ์„ ๋•Œ ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š๋Š” ์•ˆ์ „ํ•œ ์˜์—ญ์ด ์ตœ๋Œ€๋กœ ๋ช‡ ๊ฐœ๊ฐ€ ๋งŒ๋“ค์–ด ์ง€๋Š” ์ง€๋ฅผ ์กฐ์‚ฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

์ด๋•Œ, ๋ฌธ์ œ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ, ์žฅ๋งˆ์ฒ ์— ๋‚ด๋ฆฌ๋Š” ๋น„์˜ ์–‘์— ๋”ฐ๋ผ ์ผ์ •ํ•œ ๋†’์ด ์ดํ•˜์˜ ๋ชจ๋“  ์ง€์ ์€ ๋ฌผ์— ์ž ๊ธด๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.
์–ด๋–ค ์ง€์—ญ์˜ ๋†’์ด ์ •๋ณด๋Š” ํ–‰๊ณผ ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ๊ฐ๊ฐ N์ธ 2์ฐจ์› ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ์ฃผ์–ด์ง€๋ฉฐ ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ๋Š” ํ•ด๋‹น ์ง€์ ์˜ ๋†’์ด๋ฅผ ํ‘œ์‹œํ•˜๋Š” ์ž์—ฐ์ˆ˜์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ์€ N=5์ธ ์ง€์—ญ์˜ ๋†’์ด ์ •๋ณด์ด๋‹ค.
์ด์ œ ์œ„์™€ ๊ฐ™์€ ์ง€์—ญ์— ๋งŽ์€ ๋น„๊ฐ€ ๋‚ด๋ ค์„œ ๋†’์ด๊ฐ€ 4 ์ดํ•˜์ธ ๋ชจ๋“  ์ง€์ ์ด ๋ฌผ์— ์ž ๊ฒผ๋‹ค๊ณ  ํ•˜์ž.
์ด ๊ฒฝ์šฐ์— ๋ฌผ์— ์ž ๊ธฐ๋Š” ์ง€์ ์„ ํšŒ์ƒ‰์œผ๋กœ ํ‘œ์‹œํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 
๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š๋Š” ์•ˆ์ „ํ•œ ์˜์—ญ์ด๋ผ ํ•จ์€ ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š๋Š” ์ง€์ ๋“ค์ด ์œ„, ์•„๋ž˜, ์˜ค๋ฅธ์ชฝ ํ˜น์€ ์™ผ์ชฝ์œผ๋กœ ์ธ์ ‘ํ•ด ์žˆ์œผ๋ฉฐ ๊ทธ ํฌ๊ธฐ๊ฐ€ ์ตœ๋Œ€์ธ ์˜์—ญ์„ ๋งํ•œ๋‹ค. ์œ„์˜ ๊ฒฝ์šฐ์—์„œ ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š๋Š” ์•ˆ์ „ํ•œ ์˜์—ญ์€ 5๊ฐœ๊ฐ€ ๋œ๋‹ค(๊ผญ์ง“์ ์œผ๋กœ๋งŒ ๋ถ™์–ด ์žˆ๋Š” ๋‘ ์ง€์ ์€ ์ธ์ ‘ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ทจ๊ธ‰ํ•œ๋‹ค). 

๋˜ํ•œ ์œ„์™€ ๊ฐ™์€ ์ง€์—ญ์—์„œ ๋†’์ด๊ฐ€ 6์ดํ•˜์ธ ์ง€์ ์„ ๋ชจ๋‘ ์ž ๊ธฐ๊ฒŒ ๋งŒ๋“œ๋Š” ๋งŽ์€ ๋น„๊ฐ€ ๋‚ด๋ฆฌ๋ฉด ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š๋Š” ์•ˆ์ „ํ•œ ์˜์—ญ์€ ์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ์™€ ๊ฐ™์ด ๋„ค ๊ฐœ๊ฐ€ ๋จ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 
์ด์™€ ๊ฐ™์ด ์žฅ๋งˆ์ฒ ์— ๋‚ด๋ฆฌ๋Š” ๋น„์˜ ์–‘์— ๋”ฐ๋ผ์„œ ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š๋Š” ์•ˆ์ „ํ•œ ์˜์—ญ์˜ ๊ฐœ์ˆ˜๋Š” ๋‹ค๋ฅด๊ฒŒ ๋œ๋‹ค. ์œ„์˜ ์˜ˆ์™€ ๊ฐ™์€ ์ง€์—ญ์—์„œ ๋‚ด๋ฆฌ๋Š” ๋น„์˜ ์–‘์— ๋”ฐ๋ฅธ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๋‹ค ์กฐ์‚ฌํ•ด ๋ณด๋ฉด ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š๋Š” ์•ˆ์ „ํ•œ ์˜์—ญ์˜ ๊ฐœ์ˆ˜ ์ค‘์—์„œ ์ตœ๋Œ€์ธ ๊ฒฝ์šฐ๋Š” 5์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

์–ด๋–ค ์ง€์—ญ์˜ ๋†’์ด ์ •๋ณด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์žฅ๋งˆ์ฒ ์— ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š๋Š” ์•ˆ์ „ํ•œ ์˜์—ญ์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. 

 

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

์ž…๋ ฅ 

  • ์ฒซ์งธ ์ค„์—๋Š” ์–ด๋–ค ์ง€์—ญ์„ ๋‚˜ํƒ€๋‚ด๋Š” 2์ฐจ์› ๋ฐฐ์—ด์˜ ํ–‰๊ณผ ์—ด์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ˜ N์ด ์ž…๋ ฅ๋œ๋‹ค.
  • N์€ 2 ์ด์ƒ 100 ์ดํ•˜์˜ ์ •์ˆ˜์ด๋‹ค.
  • ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ๊ฐ ์ค„์—๋Š” 2์ฐจ์› ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ํ–‰๋ถ€ํ„ฐ N๋ฒˆ์งธ ํ–‰๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ํ•œ ํ–‰์”ฉ ๋†’์ด ์ •๋ณด๊ฐ€ ์ž…๋ ฅ๋œ๋‹ค.
  • ๊ฐ ์ค„์—๋Š” ๊ฐ ํ–‰์˜ ์ฒซ ๋ฒˆ์งธ ์—ด๋ถ€ํ„ฐ N๋ฒˆ์งธ ์—ด๊นŒ์ง€ N๊ฐœ์˜ ๋†’์ด ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ž์—ฐ์ˆ˜๊ฐ€ ๋นˆ ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ž…๋ ฅ๋œ๋‹ค.
  • ๋†’์ด๋Š” 1์ด์ƒ 100 ์ดํ•˜์˜ ์ •์ˆ˜์ด๋‹ค.

 

์ถœ๋ ฅ

  • ์ฒซ์งธ ์ค„์— ์žฅ๋งˆ์ฒ ์— ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š๋Š” ์•ˆ์ „ํ•œ ์˜์—ญ์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

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

5
6 8 2 6 2
3 2 3 4 6
6 7 3 3 2
7 2 5 3 6
8 9 5 2 7

 

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

5

 

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

7
9 9 9 9 9 9 9
9 2 1 2 1 2 9
9 1 8 7 8 1 9
9 2 7 9 7 2 9
9 1 8 7 8 1 9
9 2 1 2 1 2 9
9 9 9 9 9 9 9

 

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

6

โ€‹

 

โ€‹

๐Ÿ’ป  Main.java

  • BFS์™€ DFS๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ! ๋‚˜๋Š” ์ข€๋” ์†๋„๊ฐ€ ๋น ๋ฅธ BFS๋กœ ๋ฌธ์ œ๋ฅผ ํ’€๋„๋ก ํ–ˆ๋‹ค.
  • ์ง€์—ญ์˜ ์ขŒํ‘œ๋ฅผ ์ €์žฅํ•ด์ค„ Point ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ ๋‹ค
  • ์ง€์—ญ ์ •๋ณด๋Š” board์— ์ €์žฅํ•˜๊ณ , ์•ˆ์ „ ์ง€๋Œ€์˜ ์ •๋ณด๋Š” safe์— ์ €์žฅํ•ด์คฌ๋‹ค.
    • ์ด๋•Œ safe๊ฐ€ ์ค‘๋ณต ๋ฐฉ๋ฌธ์„ ๋ง‰๋„๋ก ๋ฐฉ๋ฌธ ๊ธฐ๋ก์„ ํ‘œ์‹œํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
  • 0๋ถ€ํ„ฐ ์ง€์—ญ์˜ ์ตœ๋Œ€ ๋†’์ด๊นŒ์ง€ ๋น„๊ฐ€ ์Ÿ์•„์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ์˜ˆ์ƒํ•˜๊ณ  (๋น„๊ฐ€ ์•ˆ์˜ฌ์ˆ˜๋„  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 0ํฌํ•จ, 0~maxHeight)
  • ์ฐจ์˜ค๋ฅด๋Š” ๋†’์ด๋ณด๋‹ค ๋†’์€ ์ง€์—ญ์„ ์ง€๋‚˜๊ฐˆ๋•Œ ๋„“์ด ์šฐ์„  ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•ด์ฃผ์ž
/* ๋ฐฑ์ค€ - 2468 :: ์•ˆ์ „ ์˜์—ญ */
import java.util.*;

import java.io.*;
class Point {
	public int x, y;
	Point (int x, int y){
		this.x = x;
		this.y = y;
	}
}

public class Main {
	// ์ƒํ•˜์ขŒ์šฐ๋ฅผ ์ง€๋‚˜๊ฐ€๋„๋ก dx,dy ์„ธํŒ…
	static int[] dx = {-1, 0, 1, 0};
	static int[] dy = {0, 1, 0, -1};
	static int[][] board, safe;
	static Queue<Point> q = new LinkedList<>();
	
	public static void bfs(int height, int cnt) {				
		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 && nx < board.length && ny >= 0 && ny < board.length // ์˜์—ญ๊ฒ€์‚ฌ
						&& board[nx][ny] > height && safe[nx][ny] == 0) {		// ๋ฌผ์ด ์ฐจ์˜ค๋ฅด๋Š” ๋†’์ด๋ณด๋‹ค ๋†’๊ณ , ๋ฐฉ๋ฌธํ•œ์  ์—†๋Š” ์ง€์—ญ๋งŒ ๋ฐฉ๋ฌธ
					q.offer(new Point(nx, ny));
					safe[nx][ny] = cnt;
				}
			}
		}
 	}
	
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());
		board = new int[n][n];
		
		int maxHeight = 0;
		for(int i = 0; i < n; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());

			for(int j = 0; j < n; j++) {
				board[i][j] = Integer.parseInt(st.nextToken());
				maxHeight = Math.max(maxHeight, board[i][j]);
			}
		}
		
		int answer = 0;
		for(int i = 0; i < maxHeight; i++) {					// ๋ฌผ์ด ์ฐจ์˜ค๋ฅด๋Š” ๋†’์ด
			safe = new int[n][n];
			int cnt = 1;
			for(int j = 0; j < n; j++) {						// x์ขŒํ‘œ
				for(int k = 0; k < n; k++) {					// y์ขŒํ‘œ
					if(board[j][k] > i && safe[j][k] == 0) {	// ๋ฐฉ๋ฌธํ•œ์ ์ด ์—†๊ณ , ๋ฌผ์ด ์ฐจ์˜ค๋ฅด๋Š” ๋†’์ด๋ณด๋‹ค ๋†’์€ ์ง€์ ๋งŒ ๋ฐฉ๋ฌธ
						q.offer(new Point(j, k));
						bfs(i, cnt);
						answer = Math.max(answer, cnt);
						cnt++;
					}
				}
			}
		}
		
		System.out.println(answer);
		
        br.close();
	}
}
Comments