https://www.acmicpc.net/problem/14890
14890번: 경사로
첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다.
www.acmicpc.net
길이가 L인 경사로를 설치 할 때 인덱스 벗어나는걸 처리해주기가 까다로운 문제였다...
경사로는 크게 2개가 있다.
올라가는 경사로와 내려가는 경사로가 있는데 이를 따로따로 구현을 해주면 된다.
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
|
public class Main {
static int n,l;
static int map[][];
static int cnt=0;
static boolean visited[][];
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] t = br.readLine().split(" ");
n = Integer.parseInt(t[0]);
l = Integer.parseInt(t[1]); // 경사로의 길이
map = new int[n][n];
visited = new boolean [n][n];
for(int i=0; i<n; i++) {
String[] input = br.readLine().split(" ");
for(int j=0; j<n; j++) {
map[i][j] = Integer.parseInt(input[j]);
}
}
for(int i=0; i<n; i++) {
if(isPossible(i,0,0)) {
cnt++;
}
if(isPossible(0,i,1)) {
cnt++;
}
}
System.out.println(cnt);
}
public static boolean isPossible(int x, int y, int d) {
int arr[] = new int[n];
boolean[] visited = new boolean[n];
if(d==0) { // 가로
for(int i=0; i<n; i++) {
arr[i] = map[i][x];
}
}
else { // 세로
for(int i=0; i<n; i++) {
arr[i] = map[y][i];
}
}
for(int i=0; i<n-1; i++) {
if(arr[i]==arr[i+1]) {
continue;
} // 같은 경우는 경사로를 구할 필요가 없다.
return false; // 경사로는 최대길이가 1이니 해당하지 않는다면 false다
}
if(arr[i] > arr[i+1]) { // 내려가는 경사로 일 경우
for(int j=i+1; j<=i+l; j++) {
if(j>n-1) { // 경사로가 범위를 벗어나면 false
return false;
}
if(visited[j] || arr[j]!=arr[i]-1) {
return false; // 경사로를 겹치게 놓을수 없다
}
visited[j] = true;
}
}
else if(arr[i] < arr[i+1]) { //올라가는 경사로 일 경우
for(int j=i; j>i-l; j--) {
if(j<0) {
return false;
}
if(visited[j] || arr[j]!=arr[i+1]-1) {
return false;
}
visited[j] = true;
}
}
}
return true;
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
white">cs |
'알고리즘' 카테고리의 다른 글
[백준 17141] 연구소 2 -JAVA //le_effort// (0) | 2020.03.23 |
---|---|
[백준 3190] 뱀 -JAVA //le_effort// (0) | 2020.03.12 |
[백준 14503] 로봇 청소기 -JAVA //le_effort// (0) | 2020.03.12 |
[백준 15662] 톱니바퀴2 -JAVA //le_effort// (0) | 2020.03.12 |
[백준 1316] 그룹 단어 체커 -JAVA //le_effort// (0) | 2020.03.11 |