๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/16469)
< ์๋ ์ ํ >
๋ฌธ์ ํ์ด
์ ๋น์ ๊ฐ ์์น๋ถํฐ ์์ํด์ ์ํ์ข์ฐ๋ก ์์ง์ฌ ๊ฐ ์ง์ ๋ง๋ค ์ต์ ์๊ฐ์ ๊ตฌํด๋๋ค.
๊ทธ ํ์ ์ ์ฒด๋ฅผ ํ์ํ์ฌ 3๋ช ๋ค ๋ฐฉ๋ฌธํ ๊ณณ์ด๋ฉฐ ์๊ฐ์ด ์ต์์ธ ์๊ฐ์ ๊ตฌํ๋ค.
- my solution (Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class _16469_ { // ์๋
์ ํ
static int arr[][], visited[][][], r, c;
static int dx[]= {-1,1,0,0};
static int dy[]= {0,0,-1,1};
public static void main(String[] args) throws IOException {
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st=new StringTokenizer(bf.readLine());
r=Integer.parseInt(st.nextToken());
c=Integer.parseInt(st.nextToken());
arr=new int[r][c];
visited=new int[r][c][3];
for(int i=0; i<r; i++) {
String s=bf.readLine();
for(int j=0; j<c; j++) {
arr[i][j]=s.charAt(j)-'0';
for(int k=0; k<3; k++) {
visited[i][j][k]=-1;
}
}
}
for(int i=0; i<3; i++) {
st=new StringTokenizer(bf.readLine());
int x=Integer.parseInt(st.nextToken());
int y=Integer.parseInt(st.nextToken());
bfs(x-1 ,y-1, i);
}
int result=0, min_val=Integer.MAX_VALUE;
for(int i=0; i<r; i++) {
for(int j=0; j<c; j++) {
if(visited[i][j][0] !=-1 && visited[i][j][1] !=-1 && visited[i][j][2] !=-1) {
int temp=visited[i][j][0];
if(temp<visited[i][j][1]) temp=visited[i][j][1];
if(temp<visited[i][j][2]) temp=visited[i][j][2];
if(min_val>temp) {
min_val=temp;
result=1;
}else if(min_val==temp) {
result+=1;
}
}
}
}
if(result==0) {
System.out.println(-1);
}else {
System.out.println(min_val);
System.out.println(result);
}
}
private static void bfs(int x, int y, int num) {
Queue<int[]> queue=new LinkedList<>();
visited[x][y][num]=0;
queue.add(new int[] {x,y,0});
while(!queue.isEmpty()) {
int temp[]=queue.poll();
for(int i=0; i<4; i++) {
int x1=temp[0]+dx[i];
int y1=temp[1]+dy[i];
if(x1>=0 && x1<r && y1>=0 && y1<c && arr[x1][y1]==0) {
if(visited[x1][y1][num]==-1) {
visited[x1][y1][num]=temp[2]+1;
queue.add(new int[] {x1,y1, temp[2]+1});
}
}
}
}
}
}
- Main
- r, c ์ ๋ ฅ
- arr : ๋ฏธ๋ก
visited: ๋ฐฉ๋ฌธ ์ต๋จ ์๊ฐ (-1๋ก ์ด๊ธฐํ) - 3๋ช ์ ์ขํ ์ ๋ ฅ๋ฐ์ ํ bfs ํ์
- visited ์ํํ๋ฉด์ 3์ฐจ์์ ๊ฐ์ด ๋ค -1 ์๋ & ์ต์๊ฐ
์ต์๊ฐ udpate : min_val update ๋ฐ result =1
์ต์๊ฐ๊ณผ same : result += 1 - result ๊ฐ 0์ด๋ฉด ์ธ ์
๋น์ด ๋ชจ์ผ ์ ์๋ ๊ฒ์ด๋ฏ๋ก -1 ์ถ๋ ฅ
0์ด ์๋๋ฉด ์ต์ ๊ฐ๊ณผ ์ง์ ์ ๊ฐ์ ์ถ๋ ฅ
- bfs
- queue์ ์ด๊ธฐ ์์น ์ ์ฅ ๋ฐ visited ๊ฐ 0์ผ๋ก ์ ์ฅ
- queue๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต -> ์ํ์ข์ฐ๋ก ์ด๋ํ์ฌ ๋ฏธ๋ก ์์ด๊ณ ์ด๋ ๊ฐ๋ฅํ ๊ธธ์ด๋ฉฐ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ๊ณณ์ด๋ผ๋ฉด ๊ฑธ๋ฆฐ ์๊ฐ ์ ์ฅ ๋ฐ queue์ ์ ์ฅ
์๊ฐ๐ค
๋ฌธ์ ๋ฅผ ์ดํดํ๋๋ฐ ์๊ฐ์ด ์กฐ๊ธ ๊ฑธ๋ ธ์ง๋ง ์ฝ๋๋ ์ฝ๊ฒ ๊ตฌํํ ์ ์์๋ค.
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 27211_๋๋ ํ์ฑ (0) | 2023.05.21 |
---|---|
[Baekjoon] 1261_์๊ณ ์คํ (1) | 2023.05.12 |
[Baekjoon] 22352_ํญ์ฒด ์ธ์ (0) | 2023.03.20 |
[Baekjoon] 13549_์จ๋ฐ๊ผญ์ง 3 (0) | 2023.03.12 |
[Baekjoon] 17129_์๋ฆฌ์์จ์์ก๋นจ์ด๋ฑ๋ฐ๊ตฌ๋ฆฌ๊ฐ ์ ๋ณด์ฌ์ ์ฌ๋ผ์จ ์ด์ (0) | 2023.03.09 |