: 0912
오르막길은 이상없이 했는데,
내리막길을 어떻게 만들것인가를 생각을 100% 만들고 , 접근하자.
이동 저도 안됨.
기준을 경사로의 길이 즉, 밑에 부분을 타겟으로 해서 진행해보자.
내려갈때도 오르막과 동일한 사고로 접근 하면 됨!
그림 : 일단 동일한거랑, 오름차순에 대해 처리함.
-> 내림 차순의 경우는 기존 코드를 이용하고, 추가적인 조건만 추가하면
완료할 수 있음.
못품...
엄청 복잡하게 생각함.
#include <iostream>
#include <vector>
using namespace std;
#include <algorithm>
#include <queue>
#include <string>
int n, l;
int res = 0;
// 가로 한줄씩 확인하자.
bool tracking(vector<int>&vv)
{
bool check = false;
bool upper = false;
bool down = false;
int cnt = 1;
for (int i = 0; i < n - 1; ++i)
{
if (vv[i] == vv[i + 1])
{
++cnt;
//if (check == true && cnt == l)
//{
// cnt = 0;
// check = false;
//}
// 경사로의 높이는 무조건 딱 1임.
// 1. 1 -> 2 // 2 -> 3
// 2. 경사로의 바닥이 연속된 l개의 낮은 칸의 윗부분과 접해야 함.
// -> 만약에 경사로 l이 2라고 했음.
// 2 1 1 1 1 2 -> 가능함.
// 2 1 1 1 2-> 불가능함.
// 2 1 1 2 -> 불가능함.
// 2 1 2 -> 불가능함.
// 인접한 원소를 확인했을 때
// 동일한 값이 l개 이상 나오다가,
}
else
{
// l과의 값을 비교해야 함.
if (/*cnt >= l &&*/ abs(vv[i] - vv[i + 1]) == 1 )
{
//check = true;
if (vv[i] < vv[i + 1])
{
upper = true;
}
else if (vv[i] > vv[i + 1])
{
down = true;
}
}
// 인접한 높이가 2,3일 경우 false
else
{
return false;
}
cnt = 1;
}
}
// 모두 같으면
if (cnt == n)
return true;
return check;
}
// 2:24
int main()
{
// 길을 지나가는 방법 2가지가 있음.
// 1. 모든 칸의 높이가 같음.
// 2. 경사로를 놓아서 지나가기
cin >> n;
vector<vector<int>>v(n, vector<int>(n));
vector<vector<int>>v2(n, vector<int>(n));
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
cin >> v[i][j];
}
}
// 행 한줄씩 , 열 한줄씩
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
v2[i][j] = v[j][i];
}
}
tracking(v[0]);
}