๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/2178)
<๋ฏธ๋ก ํ์>
๋ฌธ์
N×Mํฌ๊ธฐ์ ๋ฐฐ์ด๋ก ํํ๋๋ ๋ฏธ๋ก๊ฐ ์๋ค.
1 | 0 | 1 | 1 | 1 | 1 |
1 | 0 | 1 | 0 | 1 | 0 |
1 | 0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 0 | 1 | 1 |
๋ฏธ๋ก์์ 1์ ์ด๋ํ ์ ์๋ ์นธ์ ๋ํ๋ด๊ณ , 0์ ์ด๋ํ ์ ์๋ ์นธ์ ๋ํ๋ธ๋ค. ์ด๋ฌํ ๋ฏธ๋ก๊ฐ ์ฃผ์ด์ก์ ๋, (1, 1)์์ ์ถ๋ฐํ์ฌ (N, M)์ ์์น๋ก ์ด๋ํ ๋ ์ง๋์ผ ํ๋ ์ต์์ ์นธ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ํ ์นธ์์ ๋ค๋ฅธ ์นธ์ผ๋ก ์ด๋ํ ๋, ์๋ก ์ธ์ ํ ์นธ์ผ๋ก๋ง ์ด๋ํ ์ ์๋ค.
์์ ์์์๋ 15์นธ์ ์ง๋์ผ (N, M)์ ์์น๋ก ์ด๋ํ ์ ์๋ค. ์นธ์ ์ ๋์๋ ์์ ์์น์ ๋์ฐฉ ์์น๋ ํฌํจํ๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ ์ ์ N, M(2 ≤ N, M ≤ 100)์ด ์ฃผ์ด์ง๋ค. ๋ค์ N๊ฐ์ ์ค์๋ M๊ฐ์ ์ ์๋ก ๋ฏธ๋ก๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ๊ฐ์ ์๋ค์ ๋ถ์ด์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ง๋์ผ ํ๋ ์ต์์ ์นธ ์๋ฅผ ์ถ๋ ฅํ๋ค. ํญ์ ๋์ฐฉ ์์น๋ก ์ด๋ํ ์ ์๋ ๊ฒฝ์ฐ๋ง ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
๋ฌธ์ ํ์ด
- my solution (Python)
import sys
from collections import deque
def maze(graph, start, depth):
dx=[-1,1,0,0] # ์ํ์ข์ฐ
dy=[0,0,-1,1]
visited = [[0] * len(graph[0]) for i in range(len(graph))] # ๋ฐฉ๋ฌธ ์ฌ๋ถ
visited[start[0]][start[1]]=1
queue=deque([start])
while queue:
temp=queue.popleft()
for i in range(4):
x=temp[0]+dx[i]
y=temp[1]+dy[i]
if x>=0 and x<len(graph) and y>=0 and y<len(graph[0]): # ๋ฏธ๋ก ๋ฒ์ ์์ด๋ผ๋ฉด
if graph[x][y]==1 and visited[x][y]==0: # ์ด๋ํ ์ ์์ผ๋ฉฐ ์์ง ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด
queue.append([x,y])
visited[x][y]=1
depth[x][y]=depth[temp[0]][temp[1]]+1
if __name__=='__main__':
n,m=map(int, sys.stdin.readline().split())
graph=[]
for i in range(n):
graph.append(list(map(int, sys.stdin.readline().strip())))
depth = [[0] * m for i in range(n)]
start=[0,0] # ์ถ๋ฐ
maze(graph, start, depth)
print(depth[n-1][m-1]+1)
ํ ๋ฒ์ ํต๊ณผํ๊ณ ์ถ์ด์ ์๋ list ์ฐ๋ ๊ฑฐ deque ์ผ๋ค!
- my solution (JAVA)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
public class _2178_๋ฏธ๋กํ์ {
static void maze(int graph[][], int start[], int depth[][]) {
int dx[]= {-1,1,0,0}; //์ํ์ข์ฐ
int dy[]= {0,0,-1,1};
int visited[][]=new int[graph.length][graph[0].length]; // ๋ฐฉ๋ฌธ ์ฌ๋ถ
visited[start[0]][start[1]]=1;
Queue<int []> queue=new LinkedList<>();
queue.add(start);
while(queue.size()!=0) {
int[] temp=queue.poll();
for(int i=0; i<4; i++) {
int x=temp[0]+dx[i];
int y=temp[1]+dy[i];
if(x>=0&& x<graph.length && y>=0 && y<graph[0].length) { //๋ฏธ๋ก ๋ฒ์ ์์ด๋ผ๋ฉด
if(graph[x][y]==1 && visited[x][y]==0) { // ์ด๋ํ ์ ์์ผ๋ฉฐ ์์ง ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด
queue.add(new int[] {x,y});
visited[x][y]=1;
depth[x][y]=depth[temp[0]][temp[1]]+1;
}
}
}
}
}
public static void main(String[] args) throws IOException{
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
String str=bf.readLine();
int n=Integer.parseInt(str.split(" ")[0]);
int m=Integer.parseInt(str.split(" ")[1]);
int graph[][]=new int[n][m];
for(int i=0; i<n; i++) {
str=bf.readLine();
for(int j=0; j<m; j++) {
graph[i][j]=Integer.parseInt(str.split("")[j]);
}
}
int depth[][]=new int[n][m];
int start[]= {0,0}; //์ถ๋ฐ
maze(graph, start, depth);
System.out.println(depth[n-1][m-1]+1);
}
}
(0,0)๋ถํฐ ์์ํด์ ์ํ์ข์ฐ๋ฅผ ํ์ธํ์ฌ ๊ฐ ์ ์๋ ๊ธธ์ด๋ฉด ๊ณ์ํด์ ๋์๊ฐ๋ฉฐ depth๋ฅผ ์ ์ฅํด์ฃผ๊ธฐ๋ง ํ๋ฉด ์ฝ๊ฒ ํ ์ ์๋ ๋ฌธ์ ์๋ค.
- maze
: dx, dy = ์ํ์ข์ฐ ํ์
: visited = ๋ฐฉ๋ฌธ ์ฌ๋ถ
: queue๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต -> ์ ์ผ ์ฒ์ ๊ฐ์ pop -> ์ํ์ข์ฐ ํ์ธํ์ฌ ๋ฏธ๋ก ๋ฒ์ ์์ด๋ฉฐ ์ด๋ํ ์ ์๊ณ , ์์ง ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด queue์ ์ถ๊ฐ ๋ฐ ๋ฐฉ๋ฌธ check, depth ์ ์ฅ
(์ด๋ํ ์์น์ depth = ํ์ฌ ์์น์ depth +1) - main
: n, m ์ ๋ ฅ
: ๋ฏธ๋ก ์ ๋ ฅ
: depth = ์ง๋์ผ ํ๋ ์นธ ์ ์ ์ฅ
: ํจ์ ํธ์ถ
: answer = ์์ ์์น์ ๋์ฐฉ ์์น๋ ํฌํจ ์ด๋ฏ๋ก depth [n-1][m-1] +1
์๊ฐ๐ค
๋ณด์๋ง์ ํ๋ค๋ฅ ์ฝ๋ ๊ตฌํํด์ ์ฑ๊ณต -!
ํ ๋ฒ์ ํต๊ณผํด์ ๋ฟ๋ฏ-!
JAVA ๋นจ๋ฆฌ.. ์ต์ํด์ ธ์ผ๊ฒ ๋ค. ๊น๋จน์ ๋ด์ฉ์ด ๋๋ฌด ๋ง์์...
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 7562_๋์ดํธ์ ์ด๋ (0) | 2022.04.04 |
---|---|
[Baekjoon] 2468_์์ ์์ญ (0) | 2022.04.01 |
[Baekjoon] 6198_์ฅ์ ์ ์ ๊พธ๋ฏธ๊ธฐ (0) | 2022.03.29 |
[Baekjoon] 2493_ํ (0) | 2022.03.28 |
[Baekjoon] 1068_ํธ๋ฆฌ (0) | 2022.03.25 |