# 유형 : 구현, 탐색

# 난이도 : 브론즈 1

# 이미 방문한 곳을 가거나, 범위에서 벗어나면 그 때가 방향을 꺾는 시점이라는 것을 안다면 쉽게 풀 수 있다.

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
package bj;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
 
public class p1952 {
    static boolean visit[][];
    static int moveX[] = {0,1,0,-1};
    static int moveY[] = {-1,0,1,0};
    public static void main(String[] args) throws IOException {
         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
         StringTokenizer st = new StringTokenizer(br.readLine());
         int M,N;
         M = Integer.parseInt(st.nextToken());
         N = Integer.parseInt(st.nextToken());
         
         visit = new boolean[M][N];
         
         int x = 0;
         int y = 0;
         int dir = 1;
         int cnt = 0;
         
         while(true) {
             if(visit[y][x])
                 break;
             visit[y][x] = true;
             
             int newX = x + moveX[dir];
             int newY = y + moveY[dir];
             
             if(0>newX || newX>=|| 0>newY || newY >= M || visit[newY][newX]) {
                 if(dir==3)
                     dir = 0;
                 else
                     dir++;
                 cnt++;
             }
             x = x + moveX[dir];
             y = y + moveY[dir];
        }
         
        System.out.println(cnt-1);
         
    }
}
 
cs

+ Recent posts