-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathyess.java
86 lines (76 loc) · 2.04 KB
/
yess.java
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
78
79
80
81
82
83
84
85
86
```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
// 경사로
/*
* 1. 경사로는 낮은 칸에 놓아야 하고, L개의 연속된 칸에 경사로의 바닥이 모두 닿아야한다.
* 2. 낮은 칸과 높은 칸의 차이는 1
* 3. 경사로를 놓을 낮은 칸의 높이는 모두 같아야하고, L개의 칸이 연속되어야한다.
*
*/
static int n ;
static int L ;
static int column [][] ;
static int row [][];
static int answer = 0 ;
public static void main(String [] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
L = Integer.parseInt(st.nextToken());
column = new int[n][n];
row = new int[n][n];
for(int i = 0 ; i < n ; i ++) {
st = new StringTokenizer(br.readLine());
for(int j = 0 ; j < n ; j ++) {
row[i][j] = Integer.parseInt(st.nextToken());
column[j][i] = row[i][j];
}
}
for(int i = 0 ; i < n ; i ++) {
find_road(column[i]);
find_road(row[i]);
}
System.out.println(answer);
}
static void find_road(int [] temp) {
boolean [] check = new boolean [n];
for(int i = 0 ; i < n -1; i ++) {
int b1 = temp[i];
int b2 = temp[i + 1];
// 두 숫자가 같을 때
if(b1 == b2) continue;
// 차이가 1 이상이면 안됨
if(Math.abs(b1 - b2) != 1) return ;
if(b1 < b2) {
// 오른쪽이 더 큰 경우
for(int l = 0 ; l < L ; l ++) {
if(i < l || check[i-l] == true) return;
if(temp[i-l] == b1) check[i-l] = true;
else return ;
}
}
else {
// 왼쪽이 더 큰 경우
for(int l = 1 ; l <= L ; l ++) {
if(i + l < n && check[i + l ] == false) {
if(temp[i + l] == b2) {
check[i + l ] = true;
}
else {
return ;
}
}
else {
return ;
}
}
}
}
answer ++ ;
}
}
```