https://www.acmicpc.net/problem/2178


1. 문제 이해


(0,0) 의 좌표부터 (m,n) 좌표 까지 이동할 때 최소경우의 수를 구하는 문제입니다.


2. 접근 방법


- 완전 탐색을 하되, 갔던곳을 다시 가지 않기 위해 큐를 사용해서 문제를 해결하고자 했습니다.

- 큐가 가지는 자료구조를 만들기 위해 Node라는 클래스를 만들었습니다.


3. 문제 해결


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package SilverBell;
 
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 NoteString {
    public static int n;
    public static int m;
    public static int result;
    public static int map[][];
    public static int dx[] = { 10-10 };
    public static int dy[] = { 010-1 };
    
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        
        st = new StringTokenizer(br.readLine());
        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());
        
        map = new int[n][m];
        for(int i=0; i<n; i++) {
            st = new StringTokenizer(br.readLine());
            String tmp = st.nextToken();
            for(int j=0; j<m; j++) {
                map[i][j] = Integer.parseInt(tmp.substring(j, j+1));
            }
        }
        
        bfs(new Node(001));
        System.out.println(result);
    }
    
    public static void bfs(Node init) {
        Queue<Node> qu = new LinkedList<>();
        qu.offer(init);
        
        while(true) {
            if(qu.isEmpty()) break;
            int x = qu.peek().x;
            int y = qu.peek().y;
            int d = qu.peek().depth;
            
            if(x == m-1 && y == n-1) {
                result = d;
                break;
            }
            qu.poll();
            for(int i=0; i<4; i++) {
                int nx = x + dx[i];
                int ny = y + dy[i];
                
                if(nx < 0 || nx >= m || ny < 0 || ny >= n) continue;
                if(map[ny][nx] == 0continue;
                
                map[ny][nx] = 0;
                qu.offer(new Node( nx, ny, d+1 ));
            }
        }
    }
}
 
class Node {
    int x, y;
    int depth;
    
    public Node(int x, int y, int depth) {
        this.x = x;
        this.y = y;
        this.depth = depth;
    }
}
cs


'Algorithm > solution' 카테고리의 다른 글

[프로그래머스 #level2] 조이스틱.java  (0) 2021.02.23
[HASH] 완주하지 못한 선수  (0) 2019.11.02
#14503. 로봇 청소기  (1) 2018.01.22
#14891. 톱니바퀴  (0) 2018.01.17
#14502. 연구소  (4) 2018.01.16

+ Recent posts