⚽14890번. 경사로 _ 하나의 변수로 두 가지의 경우 처리하기

phoenixKim·2022년 8월 22일
0

백준 알고리즘

목록 보기
78/174

언제품?

: 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]);


}

profile
🔥🔥🔥

0개의 댓글

관련 채용 정보