๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 17086_์•„๊ธฐ ์ƒ์–ด 2

๋ฟŒ์•ผ._. 2022. 5. 20. 16:37

Silver II

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/17086)

<์•„๊ธฐ ์ƒ์–ด 2>

๋ฌธ์ œ 

 

N×M ํฌ๊ธฐ์˜ ๊ณต๊ฐ„์— ์•„๊ธฐ ์ƒ์–ด ์—ฌ๋Ÿฌ ๋งˆ๋ฆฌ๊ฐ€ ์žˆ๋‹ค. ๊ณต๊ฐ„์€ 1 ×1 ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜• ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค. ํ•œ ์นธ์—๋Š” ์•„๊ธฐ ์ƒ์–ด๊ฐ€ ์ตœ๋Œ€ 1๋งˆ๋ฆฌ ์กด์žฌํ•œ๋‹ค.

์–ด๋–ค ์นธ์˜ ์•ˆ์ „๊ฑฐ๋ฆฌ๋Š” ๊ทธ ์นธ๊ณผ ๊ฐ€์žฅ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€๊นŒ์šด ์•„๊ธฐ ์ƒ์–ด์™€์˜ ๊ฑฐ๋ฆฌ์ด๋‹ค. ๋‘ ์นธ์˜ ๊ฑฐ๋ฆฌ๋Š” ํ•˜๋‚˜์˜ ์นธ์—์„œ ๋‹ค๋ฅธ ์นธ์œผ๋กœ ๊ฐ€๊ธฐ ์œ„ํ•ด์„œ ์ง€๋‚˜์•ผ ํ•˜๋Š” ์นธ์˜ ์ˆ˜์ด๊ณ , ์ด๋™์€ ์ธ์ ‘ํ•œ 8๋ฐฉํ–ฅ(๋Œ€๊ฐ์„  ํฌํ•จ)์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์•ˆ์ „๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ํฐ ์นธ์„ ๊ตฌํ•ด๋ณด์ž. 

 

 

์ž…๋ ฅ

 

์ฒซ์งธ ์ค„์— ๊ณต๊ฐ„์˜ ํฌ๊ธฐ N๊ณผ M(2 ≤ N, M ≤ 50)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ณต๊ฐ„์˜ ์ƒํƒœ๊ฐ€ ์ฃผ์–ด์ง€๋ฉฐ, 0์€ ๋นˆ์นธ, 1์€ ์•„๊ธฐ ์ƒ์–ด๊ฐ€ ์žˆ๋Š” ์นธ์ด๋‹ค. ๋นˆ์นธ๊ณผ ์ƒ์–ด์˜ ์ˆ˜๊ฐ€ ๊ฐ๊ฐ ํ•œ ๊ฐœ ์ด์ƒ์ธ ์ž…๋ ฅ๋งŒ ์ฃผ์–ด์ง„๋‹ค.

 

์ถœ๋ ฅ 

 

์ฒซ์งธ ์ค„์— ์•ˆ์ „๊ฑฐ๋ฆฌ์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

๋ฌธ์ œ ํ’€์ด

- my solution (JAVA)

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;

class Solution{
	static int distance(int[] xy, int[][]arr, int n, int m) {
		Queue<int[]> queue=new LinkedList<>();
		queue.add(xy);
		
		int visited[][]=new int[n][m];
		visited[xy[0]][xy[1]]=1;
		
		int dx[]= {-1,1,0,0,-1,-1,1,1}; // ์ธ์ ‘ํ•œ 8 ๋ฐฉํ–ฅ
		int dy[]= {0,0,-1,1,-1,1,-1,1};
		
		int d=0;
		while(queue.size()!=0) {
			int temp[]=queue.poll();
			for(int i=0; i<8; i++) {
				int x=temp[0]+dx[i];
				int y=temp[1]+dy[i];
				if(x>=0 && x<n && y>=0 && y<m) {
					if(visited[x][y]==0) {
						d=temp[2]+1;
						if(arr[x][y]==1) {
							return d;
						}else {
							visited[x][y]=1;
							queue.add(new int[] {x,y,d});
						}
					}
				}
			}
		}
		return d;
	}
	public static void main(String args[]) throws Exception{
		BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
		
		String s=bf.readLine();
		int n=Integer.parseInt(s.split(" ")[0]);
		int m=Integer.parseInt(s.split(" ")[1]);
		
		int[][] arr=new int[n][m];
		for(int i=0; i<n; i++) {
			s=bf.readLine();
			for(int j=0; j<m; j++) {
				arr[i][j]=Integer.parseInt(s.split(" ")[j]);
			}
		}
		int result=0;
		for(int i=0; i<n; i++) {
			for(int j=0; j<m; j++) {
				if(arr[i][j]==0) {
					int temp=distance(new int[] {i,j,0}, arr, n,m);
					if(result<temp) {
						result=temp;
					}
				}
			}
		}
		System.out.println(result);
		}
}

 

  • distance ( [x, y, ๊ฑฐ๋ฆฌ], arr, n, m)
    : visited = ๋ฐฉ๋ฌธ ์—ฌ๋ถ€
    : dx, dy = ์ธ์ ‘ํ•œ 8 ๋ฐฉํ–ฅ
    : queue๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต -> ์ฒซ ๋ฒˆ์งธ ๊ฐ’์„ poll ํ•˜์—ฌ ์ธ์ ‘ํ•œ 8๊ฐœ์˜ ๋ฐฉํ–ฅ์˜ x์ขŒํ‘œ, y์ขŒํ‘œ๋ฅผ ๊ตฌํ•จ -> arr ๋ฒ”์œ„ ์•ˆ์ด๋ฉฐ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๊ฑฐ๋ฆฌ +1 -> ๋งŒ์•ฝ ๊ทธ ์ขŒํ‘œ์˜ ๊ฐ’์ด 1์ด๋ฉด ์ด ๊ฑฐ๋ฆฌ๊ฐ€ ์ƒ์–ด์™€ ๊ฐ€๊นŒ์šด ๊ฑฐ๋ฆฌ ์ด๋ฏ€๋กœ return, 1์ด ์•„๋‹ˆ๋ผ๋ฉด ๋ฐฉ๋ฌธ ํ‘œ์‹œ ๋ฐ queue์— ์ถ”๊ฐ€ 
  • main
    : n, m ์ž…๋ ฅ
    : arr ์ž…๋ ฅ
    : arr๋ฅผ ์ˆœํ™˜ํ•˜๋ฉฐ arr ๊ฐ’์ด 0์ด๋ผ๋ฉด distance ํ•จ์ˆ˜ ํ˜ธ์ถœ 
    : ๋ฐ˜ํ™˜ํ•œ ๊ฐ’์ด ํ˜„์žฌ result ๊ฐ’ ๋ณด๋‹ค ํฌ๋ฉด result์— ์ €์žฅ
    : result ์ถœ๋ ฅ

์ƒ๊ฐ๐Ÿค”

 

๋ณดํ†ต Python์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์–ด JAVA๋กœ ๋„์ „ํ•ด๋ดค๋‹ค.

๋‹คํ–‰ํžˆ ํ†ต๊ณผํ•˜๊ธด ํ–ˆ๋Š”๋ฐ.. Python์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋” ์‹œ๊ฐ„์„ ์ค„์—ฌ์•ผ ํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค.