๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/16197)
< ๋ ๋์ >
๋ฌธ์ ํ์ด
bfs๋ฅผ ํ์ฉํ์ฌ ๊ฐ ๋์ ์ ์ํ์ข์ฐ๋ก ์์ง์ธ๋ค. ๊ทธ ํ ๋ณด๋ ๋ฒ์๋ฅผ ํ์ธํ์ฌ ๋์ ์ด ๋ ๋ค ๋ณด๋ ์์ด๋ฉด queue์ ์ถ๊ฐ, ํ๋๋ง ๋จ์ด์ก์ผ๋ฉด ์ข ๋ฃ, ๋ ๋ค ๋จ์ด์ก์ผ๋ฉด ๊ณ์ํด์ ์งํํ๋ค.
- 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 _16197_ { // ๋ ๋์
static int[] dx= {-1,1,0,0};
static int[] dy= {0,0,-1,1};
static char[][] map;
static Queue<int[]>queue;
static int n,m;
static int result=-1;
public static void main(String[] args) throws IOException {
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st=new StringTokenizer(bf.readLine());
n=Integer.parseInt(st.nextToken());
m=Integer.parseInt(st.nextToken());
map=new char[n][m];
queue=new LinkedList<>();
for(int i=0; i<n; i++) {
String s=bf.readLine();
for(int j=0; j<m; j++) {
map[i][j]=s.charAt(j);
if(map[i][j]=='o')queue.add(new int[] {i,j,0}); // ๋์ ์์น ์ ์ฅ
}
}
search();
System.out.println(result);
}
private static void search() {
while(!queue.isEmpty()) {
int []coin1=queue.poll();
int []coin2=queue.poll();
if(coin1[2]+1>10) continue;
for(int i=0; i<4; i++) {
int count=0;
int x1=coin1[0]+dx[i];
int y1=coin1[1]+dy[i];
int x2=coin2[0]+dx[i];
int y2=coin2[1]+dy[i];
if(x1>=0 && x1<n && y1>=0 && y1<m && map[x1][y1]=='#') { // ์ด๋ํ๋ ค๋ ์นธ์ด ๋ฒฝ์ด๋ฉด ์ด๋ x
x1=coin1[0];
y1=coin1[1];
}else if(x1<0 || x1>=n || y1<0 || y1>=m) { // ๋ฐ๊นฅ
count+=1;
}
if(x2>=0 && x2<n && y2>=0 && y2<m && map[x2][y2]=='#') {
x2=coin2[0];
y2=coin2[1];
}else if(x2<0 || x2>=n || y2<0 || y2>=m) {
count+=1;
}
if(count==0 && !(x1==coin1[0] && y1==coin1[1] && x2==coin2[0] && y2==coin2[1])) {
queue.add(new int[] {x1,y1,coin1[2]+1});
queue.add(new int[] {x2,y2,coin1[2]+1});
}else if(count==1) { // ํ๋๋ง ๋จ์ด์ง
result=coin1[2]+1;
break;
}
}
if(result>0) break;
}
}
}
- Main
- n, m ์ ๋ ฅ
- map : ๋ณด๋
- queue : ๋์ ์ [x์ขํ, y์ขํ, ํ์]๋ฅผ ์ ์ฅ
- search ํจ์ ํธ์ถ
- search
- queue์์ ๋์ 2๊ฐ์ ์์น๋ฅผ ๊บผ๋ด์ด
- ๋ฒํผ์ 10๋ฒ๋ณด๋ค ๋ง์ด ๋๋ฌ์ผ ํ๋ค๋ฉด ๋ค์ ๋์ ๊บผ๋ด๊ธฐ๋ถํฐ! ๋์๊ฐ!
- ๋์ 2๊ฐ๋ฅผ ๊ฐ๊ฐ ์ํ์ข์ฐ๋ก ์์ง์ -> ๊ฐ ๋์ ์ด ์ด๋ํ๋ ค๋ ์นธ์ด ๋ฒฝ์ด๋ฉด ์ด๋ x BUT ๋ณด๋ ๋ฐ์ด๋ผ๋ฉด count ์ฆ๊ฐ -> ๋์ ์ด ํ๋๋ ๋ฐ์ผ๋ก ๋จ์ด์ง์ง ์์์ผ๋ฉฐ ์๋ ์์น์ ๋ค๋ฅด๋ค๋ฉด queue์ ์ถ๊ฐ! / ๋์ ์ด ํ๋๋ง ๋จ์ด์ก๋ค๋ฉด ์ข ๋ฃ! / ๋์ ์ด ๋ ๋ค ๋จ์ด์ก๋ค๋ฉด ๊ณ์ํด์ ์ํ
์๊ฐ๐ค
bfs๋ฅผ ์ํํ๋ฉฐ ์กฐ๊ฑด๋ง ์ ์ค์ ํด์ฃผ๋ฉด ๊ธ๋ฐฉ ํด๊ฒฐํ ์ ์์๋ค.
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 6593_์๋ฒ ๋น๋ฉ (0) | 2023.01.08 |
---|---|
[Baekjoon] 13565_์นจํฌ (1) | 2022.12.27 |
[Baekjoon] 9019_DSLR (0) | 2022.12.23 |
[Baekjoon] 12919_A์ B 2 (0) | 2022.12.22 |
[Baekjoon] 15644_๊ตฌ์ฌ ํ์ถ 3 (0) | 2022.12.21 |