슈뢰딩거의 고등어
14890 경사로 본문
https://www.acmicpc.net/problem/14890
골드 3
14890번: 경사로
첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다.
www.acmicpc.net
내리막을 만나면, 이전 유효거리가 0 보다 크면(경사로 설치가 가능하다는 의미) 유효거리를 1-L로 변경. 평지이면 +1
오르막을 만났는데 유효길이가 L 보다 작을 경우, 경사로의 끝이 걸리므로 경사로 설치 불가.
오르막에서 경사로를 만드는 것이 가능하면 유효길이를 1로 초기화
#include <iostream>
#include <cstring>
#include <stdlib.h>
#include <vector>
#include <algorithm>
using namespace std;
int N, L;
int arr[200][110];
int main(int argc, char ** argv) {
int answer = 0;
scanf("%d %d", &N, &L);
for(int i=0; i<N; i++)
for(int j=0; j<N; j++)
scanf("%d", &arr[i][j]);
// 90 도 돌려 밑에다가 가져다 붙이기
for(int i=0; i<N; i++)
for(int j=0; j<N; j++)
arr[N+i][j] = arr[j][i];
// horiziontal
for(int i=0; i< 2*N ; i++) {
bool success = true;
int count = 1 ;
for(int j=0; j<N-1; j++)
if(arr[i][j] == arr[i][j+1]) {
count++;
}
// 오르막 && 경사로를 놓을 수 있으면
else if(arr[i][j]+1 == arr[i][j+1] && count >= L) {
count = 1;
}
// 내리막 &&
else if(arr[i][j]-1 == arr[i][j+1] && count >= 0)
count = 1-L;
else {
success = false;
break;
}
if(success == true && count >= 0)
answer++;
}
printf("%d\n", answer);
return 0;
}
'알고리즘' 카테고리의 다른 글
level 2 소수찾기 -순열 (algorithm :: next_permutaion) (0) | 2021.12.06 |
---|---|
19236 청소년상어 (cstring :: memcpy) (0) | 2021.12.06 |
16236 아기상어 (0) | 2021.12.05 |
15656 치킨배달 (0) | 2021.12.05 |
14501 퇴사 (0) | 2021.12.02 |
Comments