Notice
Recent Posts
Recent Comments
«   2024/11   »
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
Archives
Today
Total
관리 메뉴

블로그 언저리인 무언가

[백준/BOJ] 14890 경사로 본문

Programming/BOJ

[백준/BOJ] 14890 경사로

he1fire 2020. 9. 22. 00:15
728x90

문제 : 14890 경사로

 

14890번: 경사로

첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다.

www.acmicpc.net

지도가 주어졌을 때, 가로, 세로로 경사로를 놓으며 길을 만들어

지나갈 수 있는 길의 수를 출력하는 문제이다.

모든 가로세로를 확인하면서 높이가 같다면 길이를 늘리고

올라가는 경사로나 내려가는 경사로를 세울 때 지을 수 있다면 길이를 줄인다.

길의 끝까지 왔을 때 길이가 음수이거나 도중에 경사로를 놓는 것이

불가능한 상황이 나오면 세지 않는다. 


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
Comments