mts90   2년 전

조건은 다 넣었고

L=2 라면

333222333 이런 경우에 대한 케이스도 처리해줬습니다...

어디가 잘못된건지 도저히 모르겠어요...

테스트 케이스 주어진거랑 질문검색에서 올라온 테스트 케이스도 모두 맞게 나옵니다...

도와주세요!!!!!

jh05013   2년 전

.

mts90   2년 전

jh05013  님


정말 감사합니다!!!

beaican530   8달 전

흠... 여기 있는거 다 맞다고 나오는데... 뭐가 문제일까요..


#include
using namespace std;
int n, l;
int map[55][55];
int b[55];
int cnt; //지나갈 수 있는 길의 개수

void checkhorizon(int row) {
fill_n(b, sizeof(b), 0);
for (int i = 1; i < n; i++) {
if (map[row][i] == map[row][i - 1] + 1) { //증가하는 경우
for (int k = 1; k <= l; k++) { //l길이 만큼 확인
if (i - l < 0) //배열 범위 초과하는 경우
return;
if (b[i - k] == 1) //이미 경사로를 놓은 칸인 경우
return;
if (map[row][i - k] != map[row][i - 1]) // 하나라도 다른 높이가 있는 경우
return;
}
for (int k = 1; k <= l; k++) {
b[i - k] = 1;
}
}
else if (map[row][i] == map[row][i - 1] - 1 ) { //감소하는 경우
for (int k = 0; k < l; k++) { //l길이 만큼 확인
if (i + l - 1 >= n) //배열 범위 초과하는 경우
return;
if (b[i + k] == 1) //이미 경사로를 놓은 칸인 경우
return;
if (map[row][i + k] != map[row][i]) // 하나라도 다른 높이가 있는 경우
return;
}
for (int k = 0; k < l; k++) {
b[i + k] = 1;
}
}
else if (map[row][i] == map[row][i - 1]) {
continue;
}
else
return;
}
cnt++;
//cout << row <<" : " << cnt << endl;
}
void checkvertical(int col) {
fill_n(b, sizeof(b), 0);
for (int i = 1; i < n; i++) {
if (map[i][col] == map[i-1][col] + 1) { //증가하는 경우
for (int k = 1; k <= l; k++) { //l길이 만큼 확인
if (i - l < 0) //배열 범위 초과하는 경우
return;
if (b[i - k] == 1) //이미 경사로를 놓은 칸인 경우
return;
if (map[i - k][col] != map[i-1][col]) // 하나라도 다른 높이가 있는 경우
return;
}
for (int k = 1; k <= l; k++) {
b[i - k] = 1;
}
}
else if (map[i][col] == map[i - 1][col] - 1) { //감소하는 경우
for (int k = 0; k < l; k++) { //l길이 만큼 확인
if (i + l - 1 >= n) //배열 범위 초과하는 경우
return;
if (b[i + k] == 1) //이미 경사로를 놓은 칸인 경우
return;
if (map[i+k][col] != map[i][col]) // 하나라도 다른 높이가 있는 경우
return;
}
for (int k = 0; k < l; k++) {
b[i + k] = 1;
}
}
else if (map[i][col] == map[i-1][col]) {
continue;
}
else
return;
}
cnt++;
//cout << col <<" : " << cnt << endl;
}


int main() {
cin >> n >> l;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> map[i][j]; //map 생성
}
}
for (int i = 0; i < n; i++) {
checkhorizon(i);
checkvertical(i);
}
cout << cnt << endl;

}

jh05013   8달 전

게시판에 새로 올리시는 것이 답변을 받기 더 쉬울 것 같습니다.

댓글을 작성하려면 로그인해야 합니다.