티스토리 뷰
https://www.acmicpc.net/problem/14890
모든 행과 열의 인접한 경사들을 살펴보면서 경사의 차이가 1일 때, 앞이 더 큰 경우와 뒤가 더 큰 경우가 있다. 각각의 경우에 대하여 경사가 낮은쪽으로 길이가 L인 경사로를 놓을 수 있는지 확인한다. 확인하는 과정에서 인덱스가 범위를 넘어가거나 경사가 달라지거나 이미 경사로가 있다면, 해당 행 또는 열에는 경사로를 놓을 수 없다.
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 87 88 89 90 91 92 93 94 95 96 97 98 99 | #include <cstdio> #include <cstring> int n,l,map[100][100],ans; void solve() { for(int i=0;i<n;i++) // 가로 { bool F=true,visit[100]; memset(visit,0,sizeof(visit)); for(int j=0;j<n-1;j++) { if(map[i][j]==map[i][j+1]) continue; int d=map[i][j]-map[i][j+1]; if(d!=-1 && d!=1) { F=false; break; } if(d==-1) // 오른쪽이 더 큼 { bool f=true; for(int k=j;k>=j-l+1;k--) { if(k<0 || map[i][j]!=map[i][k] || visit[k]) { f=false; break; } } if(f) for(int k=j;k>=j-l+1;k--) visit[k]=true; else { F=false; break; } } else // 현재가 더 큼 { bool f=true; for(int k=j+1;k<j+1+l;k++) { if(k>=n || map[i][j+1]!=map[i][k] || visit[k]) { f=false; break; } } if(f) for(int k=j+1;k<j+1+l;k++) visit[k]=true; else { F=false; break; } } } if(F) ans++; } for(int j=0;j<n;j++) // 세로 { bool F=true,visit[100]; memset(visit,0,sizeof(visit)); for(int i=0;i<n-1;i++) { if(map[i][j]==map[i+1][j]) continue; int d=map[i][j]-map[i+1][j]; if(d!=-1 && d!=1) { F=false; break; } if(d==-1) // 아래가 더 큼 { bool f=true; for(int k=i;k>=i-l+1;k--) { if(k<0 || map[i][j]!=map[k][j] || visit[k]) { f=false; break; } } if(f) for(int k=i;k>=i-l+1;k--) visit[k]=true; else { F=false; break; } } else // 현재가 더 큼 { bool f=true; for(int k=i+1;k<i+1+l;k++) { if(k>=n || map[i+1][j]!=map[k][j] || visit[k]) { f=false; break; } } if(f) for(int k=i+1;k<i+1+l;k++) visit[k]=true; else { F=false; break; } } } if(F) ans++; } } int main() { scanf("%d %d",&n,&l); for(int i=0;i<n;i++) for(int j=0;j<n;j++) scanf("%d",&map[i][j]); solve(); printf("%d",ans); return 0; } | cs |
'Algorithm > BOJ' 카테고리의 다른 글
15686 치킨 배달 (0) | 2018.04.16 |
---|---|
14891 톱니바퀴 (0) | 2018.04.09 |
14889 스타트와 링크 (0) | 2018.04.09 |
14888 연산자 끼워넣기 (0) | 2018.04.09 |
14503 로봇 청소기 (0) | 2018.04.09 |