๋ฌธ์ (์ถ์ฒ: 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์ผ๋ก ์ด๋ป๊ฒ ๋ ์๊ฐ์ ์ค์ฌ์ผ ํ๋์ง ๋ชจ๋ฅด๊ฒ ๋ค.
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 21608_์์ด ์ด๋ฑํ๊ต (0) | 2022.05.27 |
---|---|
[Baekjoon] 16236_์๊ธฐ ์์ด (0) | 2022.05.26 |
[Baekjoon] 21610_๋ง๋ฒ์ฌ ์์ด์ ๋น๋ฐ๋ผ๊ธฐ (0) | 2022.05.16 |
[Baekjoon] 14891_ํฑ๋๋ฐํด (0) | 2022.05.12 |
[Baekjoon] 23288_์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ 2 (0) | 2022.05.11 |