블로그 언저리인 무언가
[백준/BOJ] 14890 경사로 본문
728x90
문제 : 14890 경사로
지도가 주어졌을 때, 가로, 세로로 경사로를 놓으며 길을 만들어
지나갈 수 있는 길의 수를 출력하는 문제이다.
모든 가로세로를 확인하면서 높이가 같다면 길이를 늘리고
올라가는 경사로나 내려가는 경사로를 세울 때 지을 수 있다면 길이를 줄인다.
길의 끝까지 왔을 때 길이가 음수이거나 도중에 경사로를 놓는 것이
불가능한 상황이 나오면 세지 않는다.
Code
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll N, M, arr[105][105], ans=0;
void f(ll x, ll y){
ll cnt=1;
for (int i=0;i<N-1;i++){
ll gap;
y ? gap=arr[x][i+1]-arr[x][i] : gap=arr[i+1][x]-arr[i][x];
if (gap==0)
cnt++;
else if (gap==1 && cnt>=M)
cnt=1;
else if (gap==-1 && cnt>=0)
cnt=-M+1;
else
return;
}
if (cnt>=0)
ans++;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N >> M;
for (int i=0;i<N;i++){
for (int j=0;j<N;j++){
cin >> arr[i][j];
}
}
for (int i=0;i<N;i++){
f(i,0);
f(i,1);
}
cout << ans;
return 0;
}
728x90
'Programming > BOJ' 카테고리의 다른 글
[백준/BOJ] 13703 물벼룩의 생존 확률 (0) | 2020.09.22 |
---|---|
[백준/BOJ] 4386 별자리 만들기 (0) | 2020.09.22 |
[백준/BOJ] 1057 토너먼트 (0) | 2020.09.21 |
[백준/BOJ] 14889 스타트와 링크 (0) | 2020.09.21 |
[백준/BOJ] 10779 쇠막대기 (0) | 2020.09.21 |
Comments